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

Is it possible to select an XML namespace using XPATH if you don't know what that namespace represents?

我有一些 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 转换 URL 希望它能起作用):

<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>

Sorry I can't share the exact data as it's sensitive. However, it does not include any namespace declaration just the opening xml tag.

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

<?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 作为任何转换的输入。