Xml 如何使用XPATH/XSLT检查子节点是否存在,以避免';是否不向其添加重复节点?
如果XML源文件中已经存在重复节点,我希望消除重复节点的注入。我当前的代码正确地插入了我想要的内容,但没有检查节点是否已经存在 这是我需要处理的原始XML文件:Xml 如何使用XPATH/XSLT检查子节点是否存在,以避免';是否不向其添加重复节点?,xml,xslt,xpath,Xml,Xslt,Xpath,如果XML源文件中已经存在重复节点,我希望消除重复节点的注入。我当前的代码正确地插入了我想要的内容,但没有检查节点是否已经存在 这是我需要处理的原始XML文件: <?xml version="1.0" encoding="UTF-8"?> <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata"> <fields> <fullName>Data_Che
<?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>
很难理解您的问题中给出了什么以及什么只是一个示例。你喜欢这个工作吗 XSLT1.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>
领域
事实上我解决了这个问题。如果问题不清楚,对不起。通过使用if和下面的语法,我可以忽略已经存在的子节点。谢谢
<xsl:if test="not(descendant::*[local-name()='inlineHelpText'])">
<xsl:element name="inlineHelpText">
<xsl:value-of select="name(.)"/>
</xsl:element>
</xsl:if>
可能重复的问题请告诉我问题中不清楚的地方,我会重点修改。我现在要澄清原来的问题。@rmarq423为什么不让我知道我的答案中有什么不适合你的情况。我怀疑这能解决你的问题,因为你插入的新元素不在名称空间中。