gpt4 book ai didi

xml - 对源 XML 文档的多个小更改

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:37 25 4
gpt4 key购买 nike

我是 xslt 的新手.我正在尝试提出一种对源 xml 文档进行微小更改的转换,例如来自:

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns:xliff="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file>
<trans-unit>
<source>Kodiak1 [[Name]]</source>
<target></target>
</trans-unit>
</file>
</xliff>

到:

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns:xliff="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file>
<trans-unit>
<source>Kodiak1 [[Name]]</source>
<target>Kodiak1 <ph>Name</ph></target>
</trans-unit>
</file>
</xliff>

到目前为止,我已经想出了:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="target">
<target>
<xsl:value-of select="preceding-sibling::source" />
</target>
</xsl:template>
</xsl:stylesheet>

<source> 复制文本节点到 <target>节点,但现在我卡住了 - 尤其是因为如果我添加另一个 <xsl:template match="...">它匹配原始文本(例如,不匹配新文本 - 你能告诉我下一步应该做什么吗?

最佳答案

这个转换:

<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="trans-unit[contains(source, '[[')]/target">
<xsl:variable name="vS" select="../source"/>

<target>
<xsl:value-of select="substring-before($vS, '[')"/>
<ph>
<xsl:value-of select=
"translate(substring-after($vS, '[['), ']','')"/>
</ph>
</target>
</xsl:template>

<xsl:template match="target">
<target>
<xsl:value-of select="../source"/>
</target>
</xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时(提供的文档更有趣):

<xliff xmlns:xliff="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file>
<trans-unit>
<source>Kodiak1 [[Name]]</source>
<target></target>
</trans-unit>
<trans-unit>
<source>Kodiak2</source>
<target></target>
</trans-unit>
</file>
</xliff>

产生想要的、正确的结果:

<xliff xmlns:xliff="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
<file>
<trans-unit>
<source>Kodiak1 [[Name]]</source>
<target>Kodiak1 <ph>Name</ph>
</target>
</trans-unit>
<trans-unit>
<source>Kodiak2</source>
<target>Kodiak2</target>
</trans-unit>
</file>
</xliff>

解释:

适当使用模板和标准 XPath 函数 substring-before() , substring-after() translate() .

关于xml - 对源 XML 文档的多个小更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900303/

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