我需要更改某些節點的文本,類似於Update the text of an element with XSLT based on param。Xslt:如何使用參數更改元素中的節點文本
這是我的XML:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title />
</titleStmt>
<publicationStmt>
<p />
</publicationStmt>
<sourceDesc>
<p />
</sourceDesc>
</fileDesc>
<encodingDesc>
<appInfo>
<application ident="TEI_fromDOCX" version="2.15.0">
<label>DOCX to TEI</label>
</application>
</appInfo>
</encodingDesc>
<revisionDesc>
<change>
<date>$LastChangedDate: 2014-10-19$</date>
</change>
</revisionDesc>
</teiHeader>
<text>
<body xml:id="test">
<head>DICTIONARY</head>
<entry>
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="variant" xml:lang="cu">
<orth>а̓бїе</orth>
<form type="hyperlemma" xml:lang="cu">
<orth>а̓бїе</orth>
</form>
</form>
</entry>
</body>
</text>
</TEI>
我現在想的<orth>
內容在以前的節點
<entry>
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
替換
<form type="variant" xml:lang="cu">
<orth>а̓бїе</orth>
<form type="hyperlemma" xml:lang="cu">
<orth>а̓бїе</orth>
</form>
</form>
<orth>
之間的文本爲了得到以下輸出:
<entry>
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
<form type="variant" xml:lang="cu">
<orth>а̓бїе</orth>
<form type="hyperlemma" xml:lang="cu">
<orth>абиѥ</orth>
</form>
</form>
<entry>
當我使用下面的樣式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" xpath-default-namespace="http://www.tei-c.org/ns/1.0" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:param name="replace_orth" select="entry/form[@type='hyperlemma' and @xml:lang='cu']/orth" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="form[@type='variant']/form[@type='hyperlemma' and @xml:lang='cu']/orth/text()">
<xsl:value-of select="$replace_orth" />
</xsl:template>
</xsl:stylesheet>
然後我得到
<form type="variant" xml:lang="cu">
<orth>а̓бїе</orth>
<form type="hyperlemma" xml:lang="cu">
<orth/>
</form>
所以<orth>
是空的。如果我將參數更改爲
<xsl:param name="replace_orth" select="'new orth'" />
'new orth'被打印。但是因爲<entry><form type="hyperlemma" xml:lang="cu"><orth>
的內容對於每個條目都不相同(在上面的示例XML中,我只顯示一個條目),所以我不能使用「靜態」字符串。
我需要改變什麼?
感謝您的任何提示!
非常感謝!這兩個斜線做了詭計,我現在想知道爲什麼我沒有看到我自己...... – smo 2014-11-25 07:30:24