gpt4 book ai didi

xml - 如何在一个 xsl 文档中使用两个(或更多)xml 文件?

转载 作者:行者123 更新时间:2023-12-04 04:35:55 24 4
gpt4 key购买 nike

我一直在努力让同一个 xsl 文件处理两个(或更多)XML 文件。

我按照这篇文章中的步骤操作:Including an XML file in an XML/XSL file但我一直无法让它发挥作用。

我似乎无法加载要处理的文件,没有错误。

这是第一个 xm 文件 - Dial_Stats_MWB:

<?xml version="1.0" encoding="utf-8"?>
<UK_Products_Pipeline>
<LastFinishCode>
<SiteName>UK</SiteName>
<LastFinishCode>Agent Logout</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
<LastFinishCode>
<SiteName>UK</SiteName>
<LastFinishCode>Busy</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
<LastFinishCode>
<SiteName>UK</SiteName>
<LastFinishCode>BW Sale</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
</UK_Products_Pipeline>

第二个文件 - Dial_Stats_UK:
<?xml version="1.0" encoding="utf-8"?>
<UK_Products_Pipeline>
<LastFinishCode>
<SiteName>MWB</SiteName>
<LastFinishCode>Bearer Capability Not Presently Authorized (ISDN Cause Code 57)</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
<LastFinishCode>
<SiteName>MWB</SiteName>
<LastFinishCode>Confirmed Booking</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
<LastFinishCode>
<SiteName>MWB</SiteName>
<LastFinishCode>Lost</LastFinishCode>
<Numbers>1</Numbers>
</LastFinishCode>
</UK_Products_Pipeline>

和 XSL 文件:
<?xml version="1.0" encoding='utf-8'?>
<xsl:stylesheet xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title> XSLT with XML included </title>
</head>
<body style="background-color:lightblue;color:green">
<table cellSpacing="0" border="1" cellPadding="2">
<!-- Set Variables -->
<xsl:variable name="external">
<xsl:copy-of select="document('D:\DATA\Marquee\dial_stats_UK.xml')/*"/>
</xsl:variable>
<!-- Process Data Start -->
<xsl:for-each select="//UK_Products_Pipeline/LastFinishCode">
<tr>
<xsl:if test="SiteName ='MWB'">
<td>
<xsl:value-of select="SiteName"/>
</td>
<td>
<xsl:value-of select="LastFinishCode"/>
</td>
<td>
<xsl:value-of select="Numbers"/>
</td>
</xsl:if>
</tr>
</xsl:for-each>
<!-- Process File Data Start -->
<xsl:call-template name="ExternalData">
<xsl:with-param name="data" select="$external"/>
</xsl:call-template>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="ExternalData">
<xsl:param name="data"/>
<xsl:variable name="external">
<xsl:copy-of select="document('D:\DATA\Marquee\dial_stats_UK.xml')/*"/>
</xsl:variable>
<table cellSpacing="0" border="1" cellPadding="2" style="background-color:white;color:black">
<tr>
<td>
I do see this.
</td>
</tr>
<!-- Process External Data -->
<xsl:for-each select="//UK_Products_Pipeline/LastFinishCode">
<tr>
<td>
<xsl:value-of select="SiteName"/>
</td>
</tr>
<tr>
<xsl:if test="SiteName ='UK'">
<td>
<xsl:value-of select="SiteName"/>
</td>
<td>
<xsl:value-of select="LastFinishCode"/>
</td>
<td>
<xsl:value-of select="Numbers"/>
</td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

当处理发生时,将再次处理同一个文件,而不是第二个文件。

我不知道您是否可以就我在这里做错的事情给我任何建议?

最佳答案

改变

`<xsl:for-each select="//UK_Products_Pipeline/LastFinishCode">` 


`<xsl:for-each select="document('file:///D:/DATA/Marquee/dial_stats_UK.xml')/UK_Products_Pipeline/LastFinishCode">`

在要处理来自第二个输入文件的数据的模板中。

尽管更简洁的方法是为要处理的第二个文件中的节点编写具有模式的匹配模板。
然后你会这样做:
`<xsl:apply-templates select="document('file:///D:/DATA/Marquee/dial_stats_UK.xml')/UK_Products_Pipeline" mode="my-mode"/>` 

并且该模式的模板将输出您想要的表格。

关于xml - 如何在一个 xsl 文档中使用两个(或更多)xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19758481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com