读取xml文件以捕获<value>标记

时间:2017-10-02 19:04:29

标签: xslt xsd

我们需要读取xml文件并从标记中捕获EmployeeName和EmailId值,以将输出创建为xml文件。 第一个标记始终表示EmployeeName,第五个标记始终表示EmailId。

需要捕获行/值....中存在的值。

输入xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<dataset xmlns="http://developer.net.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
    <!--
<dataset
    xmlns="http://developer.net.com/schemas/xmldata/1/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
    xs:schemaLocation="http://developer.net.com/schemas/xmldata/1/ xmldata.xsd"
>
-->
    <metadata>
        <item length="20" type="xs:string" name="EmployeeName"/>
        <item length="4" type="xs:string" name="Full/Part Time Code"/>
        <item type="xs:dateTime" name="Hire Date"/>
        <item type="xs:dateTime" name="Termination Date"/>
        <item length="30" type="xs:string" name="EmailID"/>
        <item length="30" type="xs:string" name="State"/>
       </metadata>
       <data>
          <row>
             <value>JOSEPH</value>
             <value>F</value>
             <value>1979-04-19T00:00:00</value>
             <value>2007-08-27T00:00:00</value>
             <value>joseph.Tim@gmail.com</value>
             <value>TX</value>
          </row>
          <row>
             <value>NANDY</value>
             <value>F</value>
             <value>1979-04-19T00:00:00</value>
             <value>2007-08-27T00:00:00</value>
             <value>Nandy123@gmailcom</value>
             <value>PA</value>
         </row>
       </data>
    </dataset>

预期输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:EMPLOYEEDETAILS xmlns:ns0="http://net.com/EmployeeDetails">
<Records>
<EmployeeName>JOSEPH</EmployeeName>
<EmailId>joseph.Tim@gmail.com</EmailId>
</Records>
<Records>
<EmployeeName>NANDY</EmployeeName>
<EmailId>Nandy123@gmailcom</EmailId>
</Records>
</ns0:EMPLOYEEDETAILS>

谢谢, 拉维

1 个答案:

答案 0 :(得分:0)

请尝试下面的XSLT。 您需要根据输入XML并在输出中添加根节点<EMPLOYEEDETAILS>,对匹配的命名空间进行其他更改。

编辑:更新了XSLT解决方案以处理命名空间问题。解决方案中包含的根节点<ns0:EMPLOYEEDETAILS>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns0="http://developer.net.com/schemas/xmldata/1/">
    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:param name="param-name" select="1" />
    <xsl:param name="param-email" select="5" />

    <xsl:template match="/">
        <ns0:EMPLOYEEDETAILS>
            <xsl:for-each select="//ns0:data/ns0:row">
                <Records>
                    <xsl:for-each select="ns0:value">
                        <xsl:choose>
                            <xsl:when test="position() = $param-name">
                                <EmployeeName>
                                    <xsl:value-of select="." />
                                </EmployeeName>
                            </xsl:when>
                            <xsl:when test="position() = $param-email">
                                <EmailId>
                                    <xsl:value-of select="." />
                                </EmailId>
                            </xsl:when>
                        </xsl:choose>
                    </xsl:for-each>
                </Records>
            </xsl:for-each>
        </ns0:EMPLOYEEDETAILS>
    </xsl:template>
</xsl:stylesheet>

输出

<ns0:EMPLOYEEDETAILS xmlns:ns0="http://developer.net.com/schemas/xmldata/1/">
    <Records>
        <EmployeeName>JOSEPH</EmployeeName>
        <EmailId>joseph.Tim@gmail.com</EmailId>
    </Records>
    <Records>
        <EmployeeName>NANDY</EmployeeName>
        <EmailId>Nandy123@gmailcom</EmailId>
    </Records>
</ns0:EMPLOYEEDETAILS>