gpt4 book ai didi

java - XSLT:使用xpath表达式提取兄弟节点的最后x位

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:18 25 4
gpt4 key购买 nike

我正在尝试使用 xpath 提取“红色”同级的最后 4 个数字。

源 xml 如下所示:

... 
<node2>
<key><![CDATA[RED]]></key>
<value><![CDATA[98472978241908]]></value>

... more key value pairs here...

</node2>
...

当我使用以下 xpath 时: /nodelevelX/nodelevelY/node2/key[text()='RED']/following-sibling::value

我在输出中有完整的数字,然后我尝试使用此 xpath 表达式提取数字:

/nodelevelX/nodelevelY/node2/key[text()='RED']/following-sibling::value/text()[substring(., string-length(.)-4)]

我仍然有完整的号码。子字符串函数似乎不起作用。

我的 xsl header 是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

我认为有一个小错误,但我看不出哪里。我关注了 SO 和其他人 (w3schools) 的许多讨论,并尝试遵循这些建议,但没有成功。

更新:上下文:

我使用以下标识将所有节点从源 XML 复制到目标 (xml)我在 xsl:template 内部之后对某些节点应用特定规则:

<!-- This copy the whole source XML in destination  -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>

<!-- specific rules for some nodes -->

<xsl:template match="/nodeDetails">
<mynewnode>
<!-- here I take the whole value and it s working -->
<someVal><xsl:value-of select="/nodeDetails/nodeX/key[text()='ANOTHER_KEY']/following-sibling::value" /></someVal>
<!-- FIXME substring does not work now -->
<redVal><xsl:value-of select="/nodeDetails/nodeX/key[text()='RED']/following-sibling::value/text()[substring(.,string-length(.)-4)]" /></redVal>
</mynewnode>
</xsl:template>

对于转换,我使用 Java (JDK 6) 中的 junit 类中的以下代码:

@Test
public void transformXml() throws TransformerException {

TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(getClass().getResourceAsStream("contract.xsl"));
Transformer transformer = factory.newTransformer(xslt);
Source input = new StreamSource(getClass().getResourceAsStream("source.xml"));
Writer output = new StringWriter();
transformer.transform(input, new StreamResult(output));
System.out.println("output=" + output.toString());

}

最佳答案

您当前的 XPath 将计算为节点集,但您需要的是一个字符串。请尝试这样的事情:

<xsl:variable name="value" 
select="/nodelevelX/nodelevelY/node2/key[. = 'RED']
/following-sibling::value[1]" />
<xsl:value-of select="substring($value, string-length($value) - 3)" />

虽然要确定答案,但我需要查看 XSLT 中您尝试输出该值的部分。

关于java - XSLT:使用xpath表达式提取兄弟节点的最后x位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com