如果您不知道该命名空间代表什么,是否可以使用XPATH选择XML命名空间?

时间:2015-04-15 17:43:01

标签: xml xslt xpath xslt-1.0

我有一些使用命名空间的XML数据。我不知道该命名空间代表什么。要将它添加到我的XSL模板,它看起来需要一个可能在某种程度上定义命名空间的URL。是否可以在不知道定义的URL的情况下解析它?我可以手动创建吗?

以下是一些相同的数据:

<?xml version="1.0" encoding="UTF-8"?>
<ns:NODE>
  <ns:SUBNODE>
    <ns:VALUE>test</ns:VALUE>
  </ns:SUBNODE>
</ns:NODE>

我试图获取ns:VALUE但没有运气的价值(我只是给了命名空间xsl转换网址,希望它可以工作):

<xsl:template match="/" xmlns:ns="http://www.w3.org/1999/XSL/Transform">
    <document>
      <content name="testing">
        <xsl:value-of select="/ns:NODE/ns:SUBNODE/ns:VALUE" />
      </content>
    </document>
  </vce>
</xsl:template>

我能够使用这个来获得价值,但我猜这会降低性能:

<xsl:template match="/">
    <document>
      <content name="testing">
        <xsl:value-of select="//*[name() = 'ns:VALUE']" /> 
      </content>
    </document>
  </vce>
</xsl:template>

1 个答案:

答案 0 :(得分:4)

  

很抱歉,我无法分享确切的数据,因为它很敏感。但是,不包含任何名称空间声明只是开放的xml标记。

包含名称空间元素的文档,如

<?xml version="1.0" encoding="UTF-8"?>
<ns:NODE>
  <ns:SUBNODE>
    <ns:VALUE>test</ns:VALUE>
  </ns:SUBNODE>
</ns:NODE>

必须包含一个名称空间声明,最好是在最外面的元素上:

<?xml version="1.0" encoding="UTF-8"?>
<ns:NODE xmlns:ns="www.example.com">
  <ns:SUBNODE>
    <ns:VALUE>test</ns:VALUE>
  </ns:SUBNODE>
</ns:NODE>

如果没有,则您的输入数据不符合XML条件(即格式错误)。 XSLT样式表只接受格式良好的 XML作为任何转换的输入。