0

我需要使用 XSL 在 XML 中的任何位置查找属性是否可用。例如,在下面的 xml 中,我需要检查 Manager 属性是否存在于任何地方。如果存在,我需要使用 EmployeeID、Name 和 Manager 列生成 CSV 输出,否则只需 EmployeeID 和 Name 列。

<Root>
  <Metadata>
   <id>A001</id>
   <name>Test</name>
  </Metadata>
  <Employers>
    <Employer>
      <Employee id="aaa"><Name>Rick</Name></Employee>
      <Employee id="bbb"><Name>Ram</Name></Employee>
    </Employer>
    <Employer Manager="True">
      <Employee id="ddd"><Name>Bob</Name></Employee>
      <Employee id="dcc"><Name>Tan</Name></Employee>
    </Employer>
    <Employer>
      <Employee id="fff"><Name>Zak</Name></Employee>
      <Employee id="vvv"><Name>sha</Name></Employee>
    </Employer>
  </Employers>
</Root>

请帮我。

4

2 回答 2

1
<xsl:template match="someElement/@someAttrName">
<!-- DO BLOCK -->
</xsl:template>
于 2013-10-10T20:24:05.810 回答
1

试试下面的 XPath 表达式:

//@Manager

或者,如果Manager属性必须包含字符串True

//@Manager[.='True']

//是 的缩写/descendant-or-self::node()/。因此//@Manager返回Manager文档中的每个属性。迭代文档中的所有节点是昂贵的,所以最好使用一个全局变量来判断是否存在Manager属性:

<xsl:variable name="has-manager-attr" select="boolean(//@Manager)"/>

我使用了这个boolean函数,因为我们只对Manager属性是否存在感兴趣。然后您可以在创建 CSV 行的模板中测试该变量:

<!-- add name and id columns -->
<xsl:if test="$has-manager-attr">
    <!-- add manager column -->
</xsl:if>
于 2013-10-10T20:36:43.667 回答