gpt4 book ai didi

xslt - XPATH选择整个树,仅包括第一棵

转载 作者:行者123 更新时间:2023-12-03 17:05:37 26 4
gpt4 key购买 nike

给定以下结构,在XPATH中,我想选择整个树,但只包含第一个日期,因此不包括所有其他日期。第一个日期之后的日期数不是恒定的。有任何想法吗?我很抱歉,格式不正确。

<A>
<B>
<DATE>04272011</DATE>
<C>
<D>
<DATE>02022011</DATE>
</D>
<D>
<DATE>03142011</DATE>
</D>
</C>
</B>
</A>




我的应用程序。

一个更好的例子

<NOTICES>

<SNOTE>

    <DATE>01272011</DATE>
<ZIP>35807</ZIP>
<CLASSCOD>A</CLASSCOD>
<EMAIL>
<ADDRESS>address 1</ADDRESS>
</EMAIL>
<CHANGES>
<MOD>
<DATE>02022011</DATE>
<MODNUM>12345</MODNUM>
<EMAIL>
<ADDRESS>address 2</ADDRESS>
</EMAIL>
</MOD>
<MOD>
<DATE>03022011</DATE>
<MODNUM>56789</MODNUM>
<EMAIL>
<ADDRESS>address 3</ADDRESS>
</EMAIL>
</MOD>
</CHANGES>
</SNOTE>


</NOTICES>

我正在将一个大型xml文件分解为单个XML文件。我最初的XPATH语句是

/注意事项/注解

每个单独的xml文件看起来都不错,只不过它拉入了所有日期:这是我想要的输出。

<SNOTE>

<DATE>01272011</DATE>
<ZIP>35807</ZIP>
<CLASSCOD>A</CLASSCOD>
<EMAIL>
<ADDRESS>address 1</ADDRESS>
</EMAIL>
<CHANGES>
<MOD>
<MODNUM>12345</MODNUM>
<EMAIL>
<ADDRESS>address 2</ADDRESS>
</EMAIL>
</MOD>
<MOD>
<MODNUM>56789</MODNUM>
<EMAIL>
<ADDRESS>address 3</ADDRESS>
</EMAIL>
</MOD>
</CHANGES>


</SNOTE>

最佳答案

XPath是XML文档的查询语言,因此它不能更改文档的结构(例如插入/删除/重命名节点)。

您需要的是XSLT转换-就像这样简单:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="DATE[preceding::DATE]"/>
</xsl:stylesheet>


在提供的XML文档上应用此转换时:

<A>
<B>
<DATE>04272011</DATE>
<C>
<D>
<DATE>02022011</DATE>
</D>
<D>
<DATE>03142011</DATE>
</D>
</C>
</B>
</A>


所需的正确结果产生了:

<A>
<B>
<DATE>04272011</DATE>
<C>
<D/>
<D/>
</C>
</B>
</A>

关于xslt - XPATH选择整个树,仅包括第一棵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623586/

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