标签: xmlwriter

XmlWriter编写空的xmlns

我正在使用以下代码初始化XmlDocument

XmlDocument moDocument = new XmlDocument();
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null));
moDocument.AppendChild(moDocument.CreateElement("kml", "http://www.opengis.net/kml/2.2"));
Run Code Online (Sandbox Code Playgroud)

在此过程的后面,我使用以下代码向其中写入一些值

using (XmlWriter oWriter = oDocument.DocumentElement.CreateNavigator().AppendChild())
{
  oWriter.WriteStartElement("Placemark");
  //....
  oWriter.WriteEndElement();
  oWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)

保存文档后,最终得到以下xml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark xmlns="">
    <!-- -->   
  </Placemark>
</kml>
Run Code Online (Sandbox Code Playgroud)

如何摆脱Placemark元素上的空xmlns?

-编辑以显示更改位置标记的方式-
如果我将名称空间放在位置标记的写入中,则不会将任何元素添加到文档中。

.net c# xml xmlwriter

5
推荐指数
1
解决办法
5835
查看次数

如何编写XML文件?

我想在我的应用程序中编写一个不那么复杂但很大的文件,并且能够通过邮件发送它(使用MFMailComposeViewController)因为NSXMLElement和相关的类没有移植到iPhone SDK,我有什么选择来创建XML文档?提前致谢.

xml iphone cocoa-touch xmlwriter

5
推荐指数
1
解决办法
7142
查看次数

通过XElement.CreateWriter创建编写器时,XmlWriter.WriteRaw转义xml

我注意到当使用XElement.CreateWriter创建编写器时,XmlWriter.WriteRaw似乎无法正常工作(它会转义xml字符).以下测试用例再现了该问题.我的用法不正确吗?有谁知道如何实现理想的行为?我需要能够将原始xml字符串写入XmlWriter并将该xml合并到XElement中.

[Test]
public void XElementWriterTest()
{
    var xelement = new XElement("test");
    using (var writer = xelement.CreateWriter())
    {
        writer.WriteRaw(@"<some raw='xml' />");
    }
    Assert.That(xelement.ToString(), Is.EqualTo(@"<test><some raw='xml' /></test>"));
    // actual : "<test>&lt;some raw='xml' /&gt;</test>"
}
Run Code Online (Sandbox Code Playgroud)

c# xmlwriter linq-to-xml

5
推荐指数
1
解决办法
2143
查看次数

C#Parallel库,XmlReader,XmlWriter

我有一个用例,我需要:

  • 遍历Xml文档中的每个Input节点
  • 对每个输入执行时间密集的计算,并且
  • 将结果写入XML文件.

输入看起来像这样:

<Root>
  <Input>
    <Case>ABC123</Case>
    <State>MA</State>
    <Investor>Goldman</Investor>
  </Input>
  <Input>
    <Case>BCD234</Case>
    <State>CA</State>
    <Investor>Goldman</Investor>
  </Input>
</Root>
Run Code Online (Sandbox Code Playgroud)

和输出:

<Results>
  <Output>
    <Case>ABC123</Case>
    <State>MA</State>
    <Investor>Goldman</Investor>
    <Price>75.00</Price>
    <Product>Blah</Product>
  </Output>
  <Output>
    <Case>BCD234</Case>
    <State>CA</State>
    <Investor>Goldman</Investor>
    <Price>55.00</Price>
    <Product>Ack</Product>
  </Output>
</Results>
Run Code Online (Sandbox Code Playgroud)

我想并行运行计算; 典型的输入文件可能有50,000个输入节点,没有线程的总处理时间可能是90分钟.大约90%的处理时间花在步骤#2(计算)上.

我可以很容易地并行迭代XmlReader:

static IEnumerable<XElement> EnumerateAxis(XmlReader reader, string axis)
{
  reader.MoveToContent();
  while (reader.Read())
  {
    switch (reader.NodeType)
    {
      case XmlNodeType.Element:
        if (reader.Name == axis)
        {
          XElement el = XElement.ReadFrom(reader) as XElement;
          if (el != null)
            yield return el;
        }
        break;
    }
  }
} …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading xmlwriter

5
推荐指数
1
解决办法
2820
查看次数

在C#中使用StringWriter编码UTF-8的XmlWriter

我正在使用C#输出一个xml文件,我试图将xml编码值设置为UTF-8,但它当前正在输出:

<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public sealed class StringWriterWithEncoding: StringWriter {
    private readonly Encoding encoding;

    public StringWriterWithEncoding(Encoding encoding) {
        this.encoding = encoding;
    }

    public override Encoding Encoding {
        get {
            return encoding;
        }
    }
}

private string GetXml(JobStore jobStore) {
    StringWriterWithEncoding sw = new StringWriterWithEncoding();
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Encoding = Encoding.UTF8;
    settings.Encoding = Encoding.GetEncoding("utf-8");
    settings.Indent = true;
    using(var writer = XmlWriter.Create(sw, settings)) {
        writer.WriteStartDocument();
        writer.WriteStartElement("resources");

        writer.WriteStartElement("string");
        writer.WriteAttributeString("name");
        writer.WriteCData("value");
        writer.WriteEndElement();

        writer.WriteEndElement();
        writer.WriteEndDocument();
    }
    return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)

一定是简单的我错过了吗?

c# xml encoding xmlwriter utf-8

5
推荐指数
1
解决办法
2万
查看次数

':' 字符,十六进制值 0x3A,不能包含在名称中。"}

我正在使用 VS2010、C#、.net 和 xmlWriter 创建符合 HL7 CAT-1 规范的 xml 文档。必须在文档中创建一个属性“sdtc:ValueSet”。由于字符“:”无效,我无法写入此属性名称。

这是实际的代码行:

writer.WriteAttributeString("sdtc:valueSet", "OID value");
Run Code Online (Sandbox Code Playgroud)

有没有人有创建属性的解决方案,如图所示?

继续研究,但决定发布这个问题,希望快速找到解决方案。

这个问题被标记为重复,我在争论是错误的。现有响应引用了编写元素或使用 LINQ。该问题使用 xmlWriter 明确说明了 Attribute。一位响应者建议使用重载的 WriteAttributeString 方法,该方法解决了问题。

c# xmlwriter

4
推荐指数
1
解决办法
3121
查看次数

C# XmlWriter 命名空间问题

我正在使用XmlWriter并且正在努力创建以下 XML 标记。

<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0_idx.xsd" version="1.1">
Run Code Online (Sandbox Code Playgroud)

我有以下几点:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

XmlWriter xmlWriter = XmlWriter.Create(xmlFilePath, settings);

xmlWriter.WriteStartDocument();

xmlWriter.WriteStartElement("mzML", "xmlns", @"http://psi.hupo.org/ms/mzml");

xmlWriter.WriteAttributeString("xsi", "xmlns", @"http://www.w3.org/2001/XMLSchema-instance");

xmlWriter.WriteAttributeString("schemaLocation", "xsi", @"http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd");

xmlWriter.WriteAttributeString("version", "1.1");

xmlWriter.WriteEndElement();

xmlWriter.WriteEndDocument();

xmlWriter.Close();
Run Code Online (Sandbox Code Playgroud)

结果如下:

<mzML:xmlns p1:xsi="http://www.w3.org/2001/XMLSchema-instance" p2:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" version="1.1.0" xmlns:p2="xsi" xmlns:p1="xmlns" xmlns:mzML="http://psi.hupo.org/ms/mzml">
Run Code Online (Sandbox Code Playgroud)

文档让我很困惑;我已经尝试了上述代码的许多变体,但似乎无法接近我的目标 XML 标记。

有人可以帮忙吗?

XmlWriter由于我需要创建的 XML 文件的大小,我需要使用 PS 。)

c# xmlwriter

4
推荐指数
1
解决办法
2953
查看次数

类型名称“Create”在类型 XmlWriter 中不存在

我正在尝试在 Visual Studio 2017 上编写 Xml 程序,但出现错误:

using System.Xml;
...
XmlWriter.Create("C:\\myxmlfile.xml", settings);
Run Code Online (Sandbox Code Playgroud)

有了这个消息:The type name 'Create' doesn't exist in the type XmlWriter.

我怀疑我的 Visual Studio 的不完整安装(不幸的是尚未修复)导致了此问题。我该如何修复它?

xml xmlwriter visual-studio-2017

4
推荐指数
1
解决办法
858
查看次数

如何使用 XmlSerializer 通过 DefaultValueAttribute 序列化属性?

我用来XmlSerializer将 C# 对象序列化为 XML。我有DefaultValueAttribute一些我尝试序列化的类的属性,当我尝试序列化它们时,XmlSerializer如果它等于默认值,则似乎不包含 xml 中的值。看这个例子:

using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace Test
{
    public class Person
    {
        [System.Xml.Serialization.XmlAttribute()]
        [System.ComponentModel.DefaultValue("John")]
        public string Name { get; set; }
    }

    public static class Test
    {
        public static void Main()
        {
            var serializer = new XmlSerializer(typeof(Person));
            var person = new Person { Name = "John" };

            using (var sw = new StringWriter())
            {
                using (var writer = XmlWriter.Create(sw))
                {
                    serializer.Serialize(writer, person);
                    var xml = sw.ToString();
                } …
Run Code Online (Sandbox Code Playgroud)

c# xml attributes xmlwriter xmlserializer

4
推荐指数
1
解决办法
2573
查看次数

按特定顺序编写 XML 属性和命名空间声明

我正在尝试创建一个带有根元素的 XML 文件:

<urn:Command complete="true" xmlns:urn="namespaceURI">
Run Code Online (Sandbox Code Playgroud)

所以我有一个元素Command ,一个命名空间,namespaceURI 一个前缀urn ,最后一个属性字符串,其中包含名称和completetrue ,但没有命名空间。

我为此编写的代码返回:

<urn:Command xmlns:urn="namespaceURI" complete="true">
Run Code Online (Sandbox Code Playgroud)

所以问题是我希望属性字符串位于 XML 文件中的命名空间定义之前,但我在该网站上找不到类似的问题。

我尝试编写一个StartElement带有前缀和名称空间的元素,然后编写一个AttributeString不带名称空间的元素,这将返回根元素,其中首先定义了名称空间,然后是属性字符串。我也尝试过仅定义一个开始元素,然后定义两个属性字符串,但后来我找不到将前缀写入开始元素的方法。

这是我的原始代码,它首先返回具有命名空间定义的根元素,然后返回属性定义:

`Dim Writer as System.Xml.XmlWriter;
dim writerSettings  as System.Xml.XmlWriterSettings;
dim basePath as string;
dim source as string;
dim destination as string;

writerSettings = new System.Xml.XmlWriterSettings();
'writerSettings.ConformanceLevel= false;
'writerSettings.Encoding = new System.Text.UTF8Encoding(false);
writerSettings.OmitXmlDeclaration = false;

basePath = System.IO.Path.Combine("\\wnlcuieb502\WEI\Outbound","RolexSet");
source  = System.IO.Path.Combine(basePath,"\\wnlcuieb502\WEI\Outbound","TEST.XML");

Writer = System.Xml.XmlWriter.Create(source,writerSettings);
Writer.WriteStartDocument();

Writer.WriteStartElement("urn","SetPackagingOrder","urn:laetus.com:ws:tts:mes");
Writer.WriteAttributeString("complete",null,"true");
Writer.WriteEndElement();
Writer.WriteEndDocument();
Writer.dispose();


try
    destination …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlwriter xml-namespaces xml-attribute

4
推荐指数
1
解决办法
2397
查看次数