gpt4 book ai didi

xml - 如何使用 XPATH/XSLT 检查子节点是否存在,以免向其添加重复节点?

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

如果 XML 源文件中已经存在重复节点,我想消除注入(inject)重复节点。我当前的代码正确插入了我想要的内容,但不检查节点是否已经存在。

这是我需要操作的原始 XML 文件:

    <?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<fields>
<fullName>Data_Check_Comments__c</fullName>
<description>Checking Data for Company</description>
<label>Data Check Comments</label>
</fields>
<fields>
<fullName>My_Test_Obj__c</fullName>
<description>General info about the test object.</description>
<inlineHelpText>This is simply a test object.</inlineHelpText>
<label>My Test Obj</label>
</fields>
</CustomObject>

这是我想要的输出 XML:
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<fields>
<inlineHelpText>fields</inlineHelpText>
<fullName>Data_Check_Comments__c</fullName>
<description>Checking Data for Company</description>
<label>Data Check Comments</label>
</fields>
<fields>
<!--***I don't want this duplicate*** inlineHelpText xmlns="">fields</inlineHelpText-->
<fullName>My_Test_Obj__c</fullName>
<description>General info about the test object.</description>
<inlineHelpText>This is simply a test object.</inlineHelpText>
<label>My Test Obj</label>
</fields>
</CustomObject>

最后这是我目前的 xlst:
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:a="http://soap.sforce.com/2006/04/metadata">

<xsl:template match="a:CustomObject/*">
<xsl:copy>
<xsl:element name="inlineHelpText">
<xsl:value-of select="name(.)"/>
</xsl:element>

<xsl:call-template name="copy-children"/>
</xsl:copy>
</xsl:template>

<xsl:template name="copy-children">
<xsl:copy-of select="./*"/>
</xsl:template>

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

最佳答案

很难理解你的问题中给出了什么,什么只是一个例子。像这样的东西对你有用吗?

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://soap.sforce.com/2006/04/metadata"
exclude-result-prefixes="a">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="a:fields[not(a:inlineHelpText)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<inlineHelpText xmlns="http://soap.sforce.com/2006/04/metadata">fields</inlineHelpText>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

关于xml - 如何使用 XPATH/XSLT 检查子节点是否存在,以免向其添加重复节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28506864/

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