【问题标题】:How to get 'xpath' value if the root node 2 xmlns url and one xmlns don't have prefix?如果根节点 2 xmlns url 和一个 xmlns 没有前缀,如何获取“xpath”值?
【发布时间】:2019-08-02 08:08:52
【问题描述】:

我有两个 xmlns 属性,我尝试 xpath 一个节点,但它不起作用

我正在使用 XmlDocument 并且我正在尝试从该 xml 进行 xpath 。它返回 null 因为根节点有两个 xml 属性。

   <CreateRequest 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns="http://fex.com/ws/openship/v15">
       <WebAuthenticationDetail>
           <Parent>
               <Key/>
               <Password />
           </Parent>
           <UserCredential>
               <Key />
               <Password />
           </UserCredential>
       </WebAuthenticationDetail>
       <ClientDetail>
           <AccountNumber />
           <MeterNumber />
       </ClientDetail> 
   </CreateRequest>

   var nsmgr = new XmlNamespaceManager(xml.NameTable);
   nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");     
   var     
   nodes=xml.SelectNodes("/CreateRequest/ClientDetail/AccountNumber",nsmgr);  

【问题讨论】:

  • 您不需要关心前缀为 xsi 的命名空间 - 只需将默认命名空间 http://fex.com/ws/openship/v15 添加到您的 XmlNamespaceManager。
  • 谢谢@Filburt。我试图将 xsd 转换为 xml ,然后像这样生成:xmlns="fedex.com/ws/openship/v15",有没有办法使用 XmlNamespaceManager 来处理这个问题?

标签: c# asp.net xml xmldocument


【解决方案1】:

您的 xml 有一个默认命名空间。您必须添加它,为其分配一个前缀(我使用了ns)。然后在 xpath 中使用这个前缀。

如下使用:

var nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("ns", "http://fex.com/ws/openship/v15");
var nodes = xml.SelectNodes("/ns:CreateRequest/ns:ClientDetail/ns:AccountNumber", nsmgr);

【讨论】:

    【解决方案2】:

    你可以忽略命名空间。

    xml.SelectNodes("/*[local-name()='CreateRequest']/*[local-name()='ClientDetail']/*[local-name()='AccountNumber']");
    

    【讨论】:

    • 我的客户发送 xsd 与 w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="fex.com/ws/openship/v15"> 将其转换为 xml 我们得到这样的:w3.org/2001/XMLSchema-instance" xmlns="fex.com/ws/openship/v15">
    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2013-06-15
    相关资源
    最近更新 更多