2013-06-06 181 views
0

我的來源是:查找元素

<content> 
    <caption>text 1</caption> 
    <element1>Notepad is a basic text-editing program and it's most commonly used to view or edit text files. A text <bold>file</bold> is a <a>file</a> type typically identified by the .txt file name extension.</element1> 
    <section1> 
    <element2>Notepad is a basic text-editing program and it's most commonly used to view or edit text files. A text file is a file type typically identified by the .txt file name extension.</element2> 
    </section1> 
</content> 

我試圖提取併爲元素打造獨一無二的ID(它可以是任何元素),其中有兩個孩子(字符元素)和文本,還有隻有文本的元素。 <bold><a>元素不應該分開。

<caption id="id1">Text 1</caption> 
    <element1 id="id2">Notepad is a basic text-editing program and it's most commonly used to view or edit text files. A text <bold>file</bold> is a <a>file</a> type typically identified by the .txt file name extension.</element1> 
    <element2 id="id3">Notepad....</element2> 

任何想法,將不勝感激......

+0

你的輸出格式是?你想跳過他們嗎? –

+0

是的我想只提取包含字符串/字符串+子元素(字符)元素的元素。只有子元素但沒有PCDATA的元素不需要考慮。 – VSr

+0

您的示例中的**標題**和** element2 **元素沒有子元素,但仍具有id屬性。這似乎與您說要從具有子項和文本的元素創建ID的位置相矛盾。它是否正確?謝謝! –

回答

0

我不太確定是否要保留層次還是你想輸出你所描述的那些元素的平面列表;以下簡單地提取所描述的元件爲平的列表(儘管保持其內容),由XSLT處理器產生的id S:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs"> 

<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*[not(*) and text()[normalize-space()]] | *[* and text()[normalize-space()]]"> 
    <xsl:copy> 
    <xsl:attribute name="id" select="generate-id()"/> 
    <xsl:apply-templates select="@* , node()" mode="copy"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="*" mode="copy"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* , node()" mode="#current"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

當施加到您的輸入樣本,撒克遜9個輸出

<?xml version="1.0" encoding="UTF-8"?> 
<caption id="d1e2">text 1</caption> 
<element1 id="d1e4">Notepad is a basic text-editing program and it's most commonly used to view or edit text files. A text <bold>file</bold> is a <a>file</a> type typically identified by the .txt file name extension.</element1> 
<element2 id="d1e13">Notepad is a basic text-editing program and it's most commonly used to view or edit text files. A text file is a file type typically identified by the .txt file name extension.</element2> 
+0

Hi @Martin,謝謝你的代碼。其實孩子元素不僅應該是大膽的,如何處理? – VSr

+0

請詳細解釋如何識別需要'id'屬性的元素以及那些不需要屬性的元素。我沒有看到'bold'或'a'元素和'caption'元素(都帶有純文本內容)之間的區別,除了按名稱區分它們。 –

+0

Hi @Martin。是的,你是對的。但在這種情況下,標題的父元素不具有PCDATA,因此它只包含子元素。這些元素可以被刪除,並且該id應該包含在兒童中,即''。但''和''元素具有父元素,它具有PCDATA(字符串),所以在父元素中,id可以不包含在子元素中。 – VSr