我正在尋找一種更簡單,更優雅的方式來替換XML中的文本。對於一個XML源,如:簡單的XSLT文本替換
<A>
<B>
<Name>ThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>NotThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>ThisOne</Name>
<Target>def</Target>
</B>
</A>
我想改變這種具有「ThisOne」到「XYZ」的名稱所有目標元素的文本。
其結果將是:
<A>
<B>
<Name>ThisOne</Name>
<Target>xyz</Target> <-- Changed.
</B>
<B>
<Name>NotThisOne</Name>
<Target>abc</Target>
</B>
<B>
<Name>ThisOne</Name>
<Target>xyz</Target> <-- Changed.
</B>
</A>
我完成了這一具有:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="B/Target">
<xsl:choose>
<xsl:when test="../Name/text()='ThisOne'"><Target>xyz</Target></xsl:when>
<xsl:otherwise><Target><xsl:value-of select="text()"/></Target></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我想這可能是與< XSL來完成:模板匹配=「B /目標/文() 「>,所以我可以只替換文本而不是整個元素,但我無法弄清楚其餘部分。
在此先感謝。
有趣 - 在幾分鐘內有3個非常相似的答案 - 我真的很歡迎來自這裏真正的專家之一的文體比較和對比。 *特別是*如果它指出了我的解決方案的改進 – Kevan 2012-03-05 19:38:38
@凱文 - 您的答案唯一的問題是,如果''元素包含任何屬性,它們將被剝離。 –
2012-03-05 19:58:39
@DevNull - 好點 - 你的/文本()風格是不太可能表現出意外的行爲是輸入文件改變,並開始在目標元素上的屬性 - 我很高興我問:) –
Kevan
2012-03-05 20:03:32