【问题标题】:xdocument adding xdocumentxdocument 添加 xdocument
【发布时间】:2013-03-16 05:01:53
【问题描述】:

我做错了,无法抓取 shippingreceiptlineitem 添加到第一个文档,我需要添加命名空间吗?

        XDocument xdoc = XDocument.Load("FirstPart.xml");
        xdoc.Root.Add(XDocument.Load("RepeatingPart.xml").Element("ShipmentReceiptLineItem").Elements()); 

要获取的xml:

 <tns:ShipmentReceiptNotification xmlns:dl="urn:rosettanet:specification:domain:Logistics:xsd:schema:02.18"
 xmlns:tns="urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01">
<tns:ShipmentReceiptLineItem>
</tns:ShipmentReceiptLineItem>
</tns:ShipmentReceiptNotification>

【问题讨论】:

  • 您正在加载两个文档,但您只显示了其中一个 - 您还没有说明将结果与您想要的结果进行比较。

标签: c# linq-to-xml xml-namespaces


【解决方案1】:

是的,当您尝试查找ShipmentReceiptLineItem 元素时,您需要使用命名空间。您需要从根元素开始,否则您对Element(...)的检查将只能找到根元素:

XDocument xdoc = XDocument.Load("FirstPart.xml");
XNamespace tns = "urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01";
xdoc.Root.Add(XDocument.Load("RepeatingPart.xml")
                       .Root
                       .Element(tns + "ShipmentReceiptLineItem")
                       .Elements());

或者进一步拆分:

XDocument repeatingDoc = XDocument.Load("RepeatingPart.xml");
XNamespace tns = "urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01";    
var elementsToAdd = repeatingDoc.Root
                                .Element(tns + "ShipmentReceiptLineItem")
                                .Elements());
var mainDoc = XDocument.Load("FirstPart.xml");
mainDoc.Root.Add(elementsToAdd);

我发现这比一次性完成所有内容更容易阅读。您可能会摆脱repeatingDoc 变量并内联that,但我绝对不会内联整个

【讨论】:

  • 根据我的需要对抓取元素进行了微小的更改,但它作为基础非常有用。谢谢你
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多