子节点具有属性AND的节点的XPath包含文本

时间:2013-01-22 10:07:32

标签: xml xslt xpath xslt-1.0

看不到完成这个,理论上比较简单的任务:

查找节点文档其中字段具有属性名称包含特定文本和子节点选项具有值。

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:Børn-Fritidsliv =&gt;选择第一个文档

2:Børn-Fritidsklub =&gt;选择第二个文档

3:Børn-Fritid =&gt;选择BOTH文件

请指出正确的方向。

1 个答案:

答案 0 :(得分: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()]]]"/>