2013-01-22 205 views
0

看不到完成這一點,在理論上相對簡單的任務:的XPath其中一個子節點具有屬性,節點包含文本

查找節點文件,其中字段有屬性,它包含特定的文本及其子節點選項有一個名稱值。

XML:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
... 
    <Documents> 
    <Document Id="35330"> 
     <Name>The Name 1</Name> 
     <DocumentEdition> 
      <Fields>    
       <Field Name="Børn-Andet Godt" FieldType="CheckBoxGroup"> 
        <Option Name="Billedkunst"></Option>   
       </Field> 
       <Field Name="Børn-Fritidsklub" FieldType="CheckBoxGroup"> 
        <Option Name="Fritidshjem"></Option> 
        <Option Name="Fritidsklub"></Option> 
        <Option Name="Ungdomsklubber"></Option> 
       </Field> 
       <Field Name="Børn-Fritidsliv" FieldType="CheckBoxGroup"> 
        <Option Name="Natur- og fritidsforeninger"></Option> 
        <Option Name="Rollespil"></Option> 
        <Option Name="Spejder">B-Spejder</Option> 
       </Field> 
      </Fields> 
     </DocumentEdition> 
    </Document> 
     <Document Id="35332"> 
      <Name>The Name 2</Name> 
      <DocumentEdition> 
       <Fields> 
        <Field Name="Børn-Andet Godt" FieldType="CheckBoxGroup"> 
         <Option Name="Billedkunst"></Option> 
        </Field> 
        <Field Name="Børn-Fritidsklub" FieldType="CheckBoxGroup"> 
         <Option Name="Fritidshjem">Fritidshjem</Option> 
         <Option Name="Fritidsklub"></Option> 
         <Option Name="Ungdomsklubber"></Option> 
        </Field> 
        <Field Name="Børn-Fritidsliv" FieldType="CheckBoxGroup"> 
         <Option Name="Natur- og fritidsforeninger"></Option> 
         <Option Name="Rollespil"></Option> 
         <Option Name="Spejder"></Option> 
        </Field> 
       </Fields> 
      </DocumentEdition> 
     </Document> 
    </Documents> 
.. 
</root> 

所以我希望能夠模板應用到文件,如

<xsl:apply-templates select="//Document[/DocumentEdition/Fields/Field[contains(@Name,'Børn-Fritid')]/Option/text()&gt;'']"/> 

但是這麼想的工作。

只需指定:文檔必須在選項中包含文本,該選項是@Name包含特定文本的字段的子節點。

在XML中,使用輸入的值:

1:出生-Fritidsliv =>選擇所述第一文檔

2:生於-Fritidsklub =>選擇所述第二文檔

3:出生-Fritid =>選擇兩個文件

請指點我正確的方向。

回答

3

下降謂語領先的斜線和檢查是否有與內容,即更改選項

<xsl:apply-templates 
select="//Document[/DocumentEdition/Fields/Field[contains(@Name,'Børn-Fritid')]/Option/text()&gt;'']"/> 

<xsl:apply-templates 
select="//Document[DocumentEdition/Fields/Field[contains(@Name,'Børn-Fritid') and Option[normalize-space()]]]"/> 
+1

你錯過了最後],但比...其他現貨上!快速... – Steen

+0

對不起有關丟失的括號,我將編輯和更正示例。 –

相關問題