首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用调用另一个XML文档的XSL转换XML

用调用另一个XML文档的XSL转换XML
EN

Stack Overflow用户
提问于 2018-04-03 21:10:56
回答 1查看 175关注 0票数 0

我试图从另一个XML文档中动态地向一个XML文档中添加一个员工ID列表。本质上,我试图构建一个XML查询,并从另一个XML结果文档中插入员工列表。

这是XSL正在调用的EmployeeList.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ExportTXML xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07" xmlns:ns1="http://www.taleo.com/ws/integration/toolkit/2005/07" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:e="http://www.taleo.com/ws/so800/2009/01" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <e:User>
        <e:EmployeeID>0000000123</e:EmployeeID>
        <e:SystemUser>false</e:SystemUser>
    </e:User>
    <e:User>
        <e:EmployeeID>0000000224</e:EmployeeID>
        <e:SystemUser>false</e:SystemUser>
    </e:User>
</ExportTXML>

这是正在转换的XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="SO1015" model="http://www.taleo.com/ws/so800/2009/01" projectedClass="User" locale="en" mode="T-XML" largegraph="true" preventDuplicates="false" xmlns:quer="http://www.taleo.com/ws/integration/query"><quer:subQueries/><quer:projections><quer:projection><quer:field path="EmployeeID"/></quer:projection></quer:projections><quer:projectionFilterings/><quer:filterings><quer:filtering>
  <quer:includedIn>
    <quer:field path="EmployeeID"/>
    <quer:list>
      <!--List will be filled at runtime.-->
    </quer:list>
  </quer:includedIn>
</quer:filtering></quer:filterings><quer:sortings/><quer:sortingFilterings/><quer:groupings/><quer:joinings/></quer:query>

下面是转换XMl并调用EmployeeList.xml的XSL:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:quer="http://www.taleo.com/ws/integration/query" xmlns:e="http://www.taleo.com/ws/so800/2009/01" exclude-result-prefixes="e">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:param name="EMPLOYEE_FILTER">C:\temp\EmployeeList.xml</xsl:param>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>

    <xsl:template match="/quer:query/quer:filterings/quer:filtering/quer:includedIn[quer:field[@path='EmployeeID']]/quer:list">
        <xsl:copy>
            <xsl:for-each select="document(replace($EMPLOYEE_FILTER, '\\', '/'))//e:User/e:EmployeeID">
                <quer:string>
                    <xsl:value-of select="."/>
                </quer:string>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

输出应该如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="SO1015" model="http://www.taleo.com/ws/so800/2009/01" projectedClass="User" locale="en" mode="T-XML" largegraph="true" preventDuplicates="false" xmlns:quer="http://www.taleo.com/ws/integration/query"><quer:subQueries/><quer:projections><quer:projection><quer:field path="EmployeeID"/></quer:projection></quer:projections><quer:projectionFilterings/><quer:filterings><quer:filtering>
  <quer:includedIn>
    <quer:field path="EmployeeID"/>
    <quer:list>
        <quer:string>0000000123</quer:string>
        <quer:string>0000000224</quer:string>
    </quer:list>
  </quer:includedIn>
</quer:filtering></quer:filterings><quer:sortings/><quer:sortingFilterings/><quer:groupings/><quer:joinings/></quer:query>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 21:20:24

您似乎想要构造一个file URL,因此您需要例如document(concat('file:///', replace($EMPLOYEE_FILTER, '\\', '/')))///e:User/e:EmployeeID。如果辅助文档中的输入元素位于名称空间http://www.taleo.com/ws/integration/toolkit/2005/07中,则需要声明xmlns:e="http://www.taleo.com/ws/integration/toolkit/2005/07"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49639203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档