我有一个XML(我知道根据XML标准这是不正确的,但我仅限于更改,因为我正在处理来自外部的响应)如下,
XML Snippet : <root>
<3party>some_value</3party>
</root>
我想在XSL样式表转换中从上面的代码片段中获取<3party>。事实是<3party>元素无效,所以我不能像下面这样引用它,因为它无法通过xsl编译。我需要一种方法来引用它作为部分元素可能使用一些正则表达式的方式?以下是错误的
<xsl:variable select="$response/root/3party" />
任何答案都会对我有所帮助。
编辑:上述用例的可能解决方案是。
<xsl:for-each select="$response/root">
<!-- Node name -->
<xsl:variable name="name" select="local-name()" />
<!-- check if it contains party -->
<xsl:if test="contains($name, 'party')">
<!-- Node value -->
<xsl:variable name="value" select="node()" />
</xsl:if>
</xsl:for-each>
关于添加到您的问题中的代码:
<xsl:for-each select="$response/root">
<!-- Node name -->
<xsl:variable name="name" select="local-name()" />
<!-- check if it contains party -->
<xsl:if test="contains($name, 'party')">
<!-- Node value -->
<xsl:variable name="value" select="node()" />
</xsl:if>
</xsl:for-each>
测试contains($name, 'party')
将永远不会返回true。上下文节点的名称为root
,且"root"中不包含"party"
更一般地说:您似乎认为问题在于如何使XSLT样式表编译。事实并非如此。这里真正的问题是输入不是格式良好的XML。必须先对输入进行解析,然后才能对其进行转换,如果它不是格式良好的XML,那么在考虑样式表之前,这个过程就会失败。