c# - XDocument 错误名称不能以 '<' 字符开头,十六进制值 0x3C

标签 c# xml

我正在尝试使用 XDcoument 创建 xml 文件,但出现以下错误

Name cannot begin with the '<' character, hexadecimal value 0x3C

这是我的代码

XDocument d = new XDocument(
                new XElement("<S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'>",
                    new XElement("<S:Header xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'>",
                        new XElement("<ns13:ACASecurityHeader xmlns='urn:us:gov:treasury:irs:ext:aca:air:7.0' xmlns:ns10='urn:us:gov:treasury:irs:msg:acauibusinessheader' xmlns:ns11='http://www.w3.org/2000/09/xmldsig#' xmlns:ns12='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' xmlns:ns13='urn:us:gov:treasury:irs:msg:acasecurityheader' xmlns:ns2='urn:us:gov:treasury:irs:common' xmlns:ns3='urn:us:gov:treasury:irs:msg:form1094-1095Btransmitterupstreammessage' xmlns:ns4='urn:us:gov:treasury:irs:msg:form1094-1095Ctransmitterupstreammessage' xmlns:ns5='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' xmlns:ns6='urn:us:gov:treasury:irs:msg:form1094-1095BCtransmittermessage' xmlns:ns7='urn:us:gov:treasury:irs:msg:form1094-1095BCtransmitterreqmessage' xmlns:ns8='urn:us:gov:treasury:irs:msg:irsacabulkrequesttransmitter' xmlns:ns9='urn:us:gov:treasury:irs:msg:acabusinessheader'>"),
                        new XElement("Author", "Moreno, Jordao")
                        ),
                        new XElement("Book",
                        new XElement("Title", "Midieval Tools and Implements"),
                        new XElement("Author", "Gazit, Inbar")
                        )
                    ),
                new XComment("This is another comment."));

有人可以帮我解决这个问题吗?

这是我想使用 XDocument 生成的示例 XML 文件 enter image description here

最佳答案

有一种比通过 XDocument 手工制作 XML 文档更简单的方法。 ,尽管如果您想那样做,我在下面提供了解释和示例。

首先,简单的方法——将 XML 创建为 string , 并将该字符串传递给 XDocument.Parse ,像这样:

string xmlString = @"<S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/""><S:Header xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd""><ns13:ACASecurityHeader xmlns:ns10=""urn:us:gov:treasury:irs:msg:acauibusinessheader"" xmlns:ns11=""http://www.w3.org/2000/09/xmldsig#"" xmlns:ns12=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" xmlns:ns13=""urn:us:gov:treasury:irs:msg:acasecurityheader"" xmlns:ns2=""urn:us:gov:treasury:irs:common"" xmlns:ns3=""urn:us:gov:treasury:irs:msg:form1094-1095Btransmitterupstreammessage"" xmlns:ns4=""urn:us:gov:treasury:irs:msg:form1094-1095Ctransmitterupstreammessage"" xmlns:ns5=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"" xmlns:ns6=""urn:us:gov:treasury:irs:msg:form1094-1095BCtransmittermessage"" xmlns:ns7=""urn:us:gov:treasury:irs:msg:form1094-1095BCtransmitterreqmessage"" xmlns:ns8=""urn:us:gov:treasury:irs:msg:irsacabulkrequesttransmitter"" xmlns:ns9=""urn:us:gov:treasury:irs:msg:acabusinessheader""><Author>Moreno, Jordao</Author><Book><Title>Midieval Tools and Implement</Title><Author>Gazit, Inbar</Author></Book></ns13:ACASecurityHeader><!--This is another comment--></S:Header></S:Envelope>";

XDocument xDoc2 = XDocument.Parse(xmlString);

xDoc2将包含您希望发送的 XML。

如果您想长期这样做,那么您发布的代码有几个问题。

首先,您没有正确处理 namespace (xmlns: 属性)。其次,您包括 <>在调用 XElement ,并且您不需要这样做 - 该方法会处理这两个符号。

您需要做的是设置命名空间,然后将它们添加到适当的元素并为它们创建属性。

示例代码与发布的代码段不匹配,因此我处理了您的示例代码以向您展示如何着手手工制作 XML。

XNamespace sNS = XNamespace.Get("http://schemas.xmlsoap.org/soap/envelope/");
XNamespace wsseNS = XNamespace.Get("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
XNamespace xmlnsNS = XNamespace.Get("urn:us:gov:treasury:irs:ext:aca:air:7.0");
XNamespace ns10NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:acauibusinessheader");
XNamespace ns11NS = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#");
XNamespace ns12NS = XNamespace.Get("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
XNamespace ns13NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:acasecurityheader");
XNamespace ns2NS = XNamespace.Get("xmlns: ns2 = 'urn:us:gov:treasury:irs:common");
XNamespace ns3NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:form1094-1095Btransmitterupstreammessage");
XNamespace ns4NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:form1094-1095Ctransmitterupstreammessage");
XNamespace ns5NS = XNamespace.Get("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
XNamespace ns6NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:form1094-1095BCtransmittermessage");
XNamespace ns7NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:form1094-1095BCtransmitterreqmessage");
XNamespace ns8NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:irsacabulkrequesttransmitter");
XNamespace ns9NS = XNamespace.Get("urn:us:gov:treasury:irs:msg:acabusinessheader");

XDocument xDoc = new XDocument(new XElement(sNS + "Envelope", new XAttribute(XNamespace.Xmlns + "S", sNS),
                        new XElement(sNS + "Header", new XAttribute(XNamespace.Xmlns + "wsse", wsseNS),
                            new XElement(ns13NS + "ACASecurityHeader", new XAttribute(XNamespace.Xmlns + "ns10", ns10NS),
                                new XAttribute(XNamespace.Xmlns + "ns11", ns11NS),
                                new XAttribute(XNamespace.Xmlns + "ns12", ns12NS),
                                new XAttribute(XNamespace.Xmlns + "ns13", ns13NS),
                                new XAttribute(XNamespace.Xmlns + "ns2", ns2NS),
                                new XAttribute(XNamespace.Xmlns + "ns3", ns3NS),
                                new XAttribute(XNamespace.Xmlns + "ns4", ns4NS),
                                new XAttribute(XNamespace.Xmlns + "ns5", ns5NS),
                                new XAttribute(XNamespace.Xmlns + "ns6", ns6NS),
                                new XAttribute(XNamespace.Xmlns + "ns7", ns7NS),
                                new XAttribute(XNamespace.Xmlns + "ns8", ns8NS),
                                new XAttribute(XNamespace.Xmlns + "ns9", ns9NS
                                new XAttribute("xmlns", xmlnsNS),
                                new XElement("Author", "Moreno, Jordao"),
                                new XElement("Book",
                                    new XElement("Title", "Midieval Tools and Implement"),
                                    new XElement("Author", "Gazit, Inbar"))
                                ),
                            new XComment("This is another comment")
                        ))
    );

上面代码做的第一件事是通过 XNamespace 设置所有命名空间。 .

接下来,构建 XML 文档。各个元素是通过 XElement 创建的,带有各种命名空间前缀(即 new XElement(sNS + "Envelope", ,以及通过 XAttribute 添加的其他命名空间。

嵌套可能会很棘手,所以你必须非常小心地这样做。上面的代码将生成以下 XML:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <ns13:ACASecurityHeader xmlns="urn:us:gov:treasury:irs:ext:aca:air:7.0"
                            xmlns:ns9="urn:us:gov:treasury:irs:msg:acabusinessheader"
                            xmlns:ns8="urn:us:gov:treasury:irs:msg:irsacabulkrequesttransmitter" 
                            xmlns:ns7="urn:us:gov:treasury:irs:msg:form1094-1095BCtransmitterreqmessage"
                            xmlns:ns6="urn:us:gov:treasury:irs:msg:form1094-1095BCtransmittermessage" 
                            xmlns:ns5="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                            xmlns:ns4="urn:us:gov:treasury:irs:msg:form1094-1095Ctransmitterupstreammessage"
                            xmlns:ns3="urn:us:gov:treasury:irs:msg:form1094-1095Btransmitterupstreammessage"                                xmlns:ns2="urn:us:gov:treasury:irs:common" 
                            xmlns:ns13="urn:us:gov:treasury:irs:msg:acasecurityheader" 
                            xmlns:ns12="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
                            xmlns:ns11="http://www.w3.org/2000/09/xmldsig#" 
                            xmlns:ns10="urn:us:gov:treasury:irs:msg:acauibusinessheader">
      <Author>Moreno, Jordao</Author>
      <Book>
        <Title>Midieval Tools and Implement</Title>
        <Author>Gazit, Inbar</Author>
      </Book>
    </ns13:ACASecurityHeader>
    <!--This is another comment-->
  </S:Header>
</S:Envelope>

关于c# - XDocument 错误名称不能以 '<' 字符开头,十六进制值 0x3C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35146010/

相关文章:

c# - WPF:如何在动态创建的 WPF 窗口中动态添加控件

c# - Fisher-Yates 在单个字符串上洗牌与使用等长排列?

c# - c#中的可选参数

c# - 订阅另一种形式的按钮点击

c# - 通过 ID 集合查询对象的 Realm

java - 性能:DOM-XPath 与键值查找

iphone - 在 iPhone 应用程序 : XML or JSON? 中使用哪个更快/更容易

android - 合并标签的使用

python - 如何将多个 XML 文件解析为多个 CSV 文件?

xml - 我可以将 xml 嵌入到 html 中吗?