代码之家  ›  专栏  ›  技术社区  ›  Marcelo Cantos

XML+XPATH:使用默认名称空间有什么方法吗?

  •  3
  • Marcelo Cantos  · 技术社区  · 14 年前

    我有一个XML SOAP结果:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body>
        <CreateCIInStockResponse xmlns="http://somenamespace.com/">
          <CreateCIInStockResult>
            <Status>OK</Status>
            <Data>SOMERESULT</Data>
          </CreateCIInStockResult>
        </CreateCIInStockResponse>
      </soap:Body>
    </soap:Envelope>
    

    如您所见,CreateCIInStockResponse中定义的名称空间使用默认名称空间-未定义前缀。

    我两个都可以 状态 如果我们使用

    /soap:Envelope/soap:Body/node()/node()/node()/text()
    

    我说的对吗?没有办法使用XPath直接访问“数据”的内容?

    1 回复  |  直到 14 年前
        1
  •  8
  •   mwittrock    14 年前

    分配 http://somenamespace.com/ 对于名称空间前缀,说“def”,然后在XPath表达式中使用它:

    更新 :如果指定前缀不是一个选项,则采用另一种方法:

    /soap:Envelope/soap:Body/*[local-name()='CreateCIInStockResponse']/*[local-name()='Data']
    

    http://somenamespace.com/ “也是。