java - 使用 XSLT 从 xml 文件的父标签和子标签获取值

标签 java xml xslt

我正在尝试将一个 XML 文件转换为 CSV 文件,我正在从以下 link 那里寻求帮助,但在一个地方我不得不从一个父标签和一个 XML 文件的一些特定子标签中检索值。我的输入 XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Payslip>
    <StaffNumber>123456</StaffNumber>
    <StaffName>ALIBABA</StaffName>
    <Sex/>      
    <PayDetails>
        <PayType>NORMAL</PayType>
        <AmountNet>2100</AmountNet> 
        <ComponentDetails>
            <ComponentType>SALARY</ComponentType>
            <ComponentSource/>
            <Code>SAL</Code>
        </ComponentDetails>                     
        <ComponentDetails>
            <ComponentType>DED</ComponentType>
            <ComponentSource/>
            <Code>DEN</Code>
        </ComponentDetails>     
    </PayDetails>
    <LeaveTaken>
        <StartDate/>
        <EndDate/>
        <Balance>0</Balance>
    </LeaveTaken>
</Payslip>

我的 xsl 文件看起来像这样,请注意我已经为一些其他要求设置了一些硬编码值。

我是 XSLT 的新手,所以请原谅这个潜在的新手问题。任何指导将不胜感激。提前致谢。

风格.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
  <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>

  <xsl:template match="/"> Worker,Pay_Group,Pay_Period_End_Date,Payment_Date,Net_Amount,Gross_Amount,Currency,Ck_Number,Display_Date
    <xsl:for-each select="//Payslip">
      <xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','&#xA;')"/>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

如果我在上面的代码中使用

<xsl:for-each select="//Payslip">

然后我只得到 StaffNumber 和 staffName 字段,但是如果我使用

<xsl:for-each select="//Payslip//PayDetails">

从 AmountNet 标签中获取值,然后它无法从 StaffNumber 标签中获取值。

最佳答案

您只能获得 StaffNumber 的值和 StaffName因为它们是 Payslip 的直系后代节点。为了获取其他节点的值,您必须为每个节点指定正确的 XPath 表达式。

例如为了得到AmountNet的值您应该将其路径称为:

PayDetails/AmountNet

不仅仅是

AmountNet

因为 for-each 循环中的当前节点是 Payslip节点。

更新

离开<xsl:for-each select="//Payslip">引用Payslip节点。只需更改以下行:

<xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','&#xA;')"/>

以下内容:

<xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',PayDetails/AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','&#xA;')"/>

关于java - 使用 XSLT 从 xml 文件的父标签和子标签获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473645/

相关文章:

java - 从 Java 中检索 MYSQL 数据库结构信息

xml - Node JS。发送带有 XML 数据的帖子

xslt 1.0 如何在选择条件下用 0(零)替换空值或空白值

java - 是否可以从 Android 上的 Xalan 调用 Java 扩展函数?

python - 如何在 XSLT 中使用 python 函数和变量?

java - 在 Java 中管理属性

Java - Tic Tac Toe - 为什么我的 "switch player"方法不起作用?

java - Prometheus 通过 JMX 监控 Apache Ignite

java - 从资源加载时 GSON 出现 EOF 错误

xml - 计算XML元素中不区分大小写的某些单词的出现