我正在尝试对 XML 标记从一件事到另一件事进行非常简单的更改。我不想更改 xml 文件中的任何其他内容。出于技术原因,我必须使用 XSLT 来执行此操作。
我看过这篇文章使用 XSLT 在 XML 文件中更改一个标记名称,但逻辑似乎不起作用。
我的输入 XML 就是这个,我想要做的就是将同步打开和关闭标签分别更改为处理打开和关闭标签。
<SyncCodeDefinition xmlns="xxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.xxx.com/OAGIS/2 http://schema.xxx.com/2.6.5/OAGIS/BODs/Developer/mytest.xsd" releaseID="9.2">
<ApplicationArea>
<Sender>
<LogicalID schemeVersionID="12345">lid://xxx.yyy.zzz</LogicalID>
<ComponentID>test1</ComponentID>
</Sender>
<CreationDateTime>2012-09-11T17:07:04Z</CreationDateTime>
<BODID>xxxxx</BODID>
</ApplicationArea>
<DataArea>
<Sync>
<TenantID>xxxx</TenantID>
<AccountingEntityID>ZZZ</AccountingEntityID>
<ActionCriteria>
<ActionExpression actionCode="Add" />
</ActionCriteria>
</Sync>
<CodeDefinition>
<DocumentID>
<ID accountingEntity="ZZZ" variationID="1">TEST001_PRODUCT</ID>
</DocumentID>
<DisplayID>TEST001_PRODUCT</DisplayID>
<Status>
<Code listID="CodeDefinitionStatus">Open</Code>
</Status>
<ListID>PRODUCT</ListID>
<CodeValue accountingEntity="ZZZ" languageID="en-GB">TEST001</CodeValue>
<Name languageID="en-GB">new test</Name>
<Description languageID="en-GB">new test</Description>
</CodeDefinition>
</DataArea>
</SyncCodeDefinition>
这是我的 XSLT,但它似乎忽略了替换语句。请帮忙 :)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"Sync[count(.|((//Sync)[1])) = 1]">
<Process>
<xsl:apply-templates />
</Process>
</xsl:template>
</xsl:stylesheet>