gpt4 book ai didi

xml - 如何使用 xslt 在特定 xml 上运行 xpath

转载 作者:行者123 更新时间:2023-12-03 17:09:33 25 4
gpt4 key购买 nike

这个问题与我的问题之一几乎相同 edit specific xml using xpath

但现在问题不同了。 xml 结构现在略有不同。先前问题的解决方案在这里不起作用。

我有以下 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="Request">
<map key="Headers">
<string key="Accept">application/json</string>
<string key="Content-Type">application/json</string>
</map>
<map key="Payload">
<map key="root">
<array key="req1">
<string>puneet</string>
<string>taneja</string>
</array>
<array key="req2">
<string>ratan</string>
</array>
</map>
</map>
</map>
</map>

以下是 XPATH
/Request/Headers/Accept=app
/Request/Headers/Content-Type=json
/Request/Payload/root/req1[2]=singh
/Request/Payload/root/req1[1]=pradeep
/Request/Payload/root/req2=suman

我想要更新的结果 xml 如下
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="Request">
<map key="Headers">
<string key="Accept">application/json</string>
<string key="Content-Type">application/json</string>
</map>
<map key="Payload">
<map key="root">
<array key="req1">
<string>pradeep</string>
<string>singh</string>
</array>
<array key="req2">
<string>suman</string>
</array>
</map>
</map>
</map>
</map>

基本上我想使用 xslt 在给定的 xpaths 上更改我的 xml。查看此位置的代码 xsltfiddle.liberty-development.net

对于这种情况,在相同的早期解决方案中进行更新也会对我有所帮助。

最佳答案

得到像这样的路径

/Request/Payload/root/req1[2]=singh
/Request/Payload/root/req1[1]=pradeep

工作你可以添加一个模板
<xsl:template match=".[contains(., '[') and contains(., '=')]" mode="step">
<xsl:if test="position() gt 1">/</xsl:if>
<xsl:sequence select="'*[@key = ''' || substring-before(., '[') || ''']/*[' || replace(., '^[^\[]+\[([0-9]+)\].*$', '$1') || ']'"/>
</xsl:template>

所以这样的代码
   <xsl:template match="*[@key = 'Request']/*[@key = 'Payload']/*[@key = 'root']/*[@key = 'req1']/*[1]">
<xsl:copy>
<xsl:copy-of select="@*"/>pradeep</xsl:copy>
</xsl:template>
<xsl:template match="*[@key = 'Request']/*[@key = 'Payload']/*[@key = 'root']/*[@key = 'req1']/*[2]">
<xsl:copy>
<xsl:copy-of select="@*"/>singh</xsl:copy>
</xsl:template>

正在生成,见 https://xsltfiddle.liberty-development.net/bdxtpY/1 .

我目前不确定如何从 /Request/Payload/root/req2=suman 推断有一个数组成员参与。

关于xml - 如何使用 xslt 在特定 xml 上运行 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506834/

25 4 0
文章推荐: javascript - 为什么我们使用两个过滤器?
文章推荐: javascript - 如何使用 Jest 和 vue-cli 更新快照
文章推荐: xml - 使用XSLT重命名XML节点的所有子节点
文章推荐: selenium - 如何通过 Selenium 和 WebDriver 从
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com