我有一個簡單的xml文本和一個小人物。我想找到文中提到的所有「人物」,並使用個人資料中的信息加以標記。 我的文字是這樣的:如何使用xslt使用外部xml數據自動編碼文本
<text>
<div>
<p>Mohandas Ghandi was an Indian lawyer, born in 1869.</p>
<p>Albert Einstein was a German physicist, born in 1879.</p>
<p>Helen Keller was an American author, born in 1880.</p>
<p>Joan Baez is an American singer/songwriter, born in 1941.</p>
</div>
</text>
和我personography看起來是這樣的:
<people>
<person id="ghandi">
<name>Mohandas Ghandi</name>
<birthPlace>Porbandar, India</birthPlace>
</person>
<person id="einstein">
<name>Albert Einstein</name>
<birthPlace>Ulm, Germany</birthPlace>
</person>
<person id="keller">
<name>Helen Keller</name>
<birthPlace>Tuscumbia, USA</birthPlace>
</person>
</people>
到目前爲止,我有這個XSLT(2.0):
<xsl:variable name="personography" select="doc('people.xml')"/>
<xsl:variable name="pName" select="$personography//person[1]/name"/>
<xsl:variable name="pId" select="$personography//person[1]/@id"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template name="encNames" match="text()">
<xsl:analyze-string select="." regex="{$pName}">
<xsl:matching-substring>
<persName corresp="{concat('people.xml#',$pId)}">
<xsl:value-of select="."/>
</persName>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
和我回到這裏:
<text>
<div>
<p><persName corresp="people.xml#ghandi">Mohandas Ghandi</persName> was an Indian lawyer, born in 1869.</p>
<p>Albert Einstein was a German physicist, born in 1879.</p>
<p>Helen Keller was an American author, born in 1880.</p>
<p>Joan Baez is an American singer/songwriter, born in 1941.</p>
</div>
</text>
所以,我的問題是,我如何在文字中標記其餘的人?我認爲它需要一個使用跟隨兄弟的功能,但我沒有得到更多的進一步的。我錯過了什麼?我至少在正確的軌道上? 謝謝。
感謝的Mads。我不得不做一些調整,但我得到了滿意的結果。由於表演的原因,我給了你勝利 - 在我的更大的「真實文本」上,這個成績幾乎是丹尼爾速度的兩倍。對不起,我無法註冊 - 我的時間不夠長。 – Greg