我有这个XML,它是一系列ContactInfo节点,一些包含PostAddr,还有一些包含PhoneNum。我必须将包含地址的ContactInfo节点与包含PhoneNum的节点匹配-- AddrSource标记值(在包含地址的ContactInfo节点中)应该匹配PhoneNum Source属性值(来自包含电话的ContactInfo节点)。
这是XML的一个示例:
<ContactInfo Source="MB" EffDt="2022-10-11">
<PostAddr>
<StreetNum>xxx</StreetNum>
<StreetName>ATLANTA</StreetName>
<StreetType>HWY</StreetType>
<Apt>099</Apt>
<City>MONTGOMERY</City>
<StateProv>AL</StateProv>
<PostalCode>1000</PostalCode>
<County>MONTGOMERY</County>
<AddrType>S</AddrType>
<ReportedDt>2019-08-09</ReportedDt>
<AddrSource>3</AddrSource>
<AddrCreatedDt>2019-07-22</AddrCreatedDt>
</PostAddr>
</ContactInfo>
<ContactInfo Source="MB" EffDt="2022-10-11">
<PostAddr>
<StreetNum>09521</StreetNum>
<StreetName>STANTON</StreetName>
<StreetType>WAY</StreetType>
<Apt>APT 19080</Apt>
<City>PRATTVILLE</City>
<StateProv>AL</StateProv>
<PostalCode>111-111</PostalCode>
<County>AUTAUGA</County>
<AddrType>H</AddrType>
<ReportedDt>2019-04-09</ReportedDt>
<AddrSource>4</AddrSource>
<AddrCreatedDt>2019-04-03</AddrCreatedDt>
</PostAddr>
</ContactInfo>
<ContactInfo Source="MB" EffDt="2022-10-11">
<PhoneNum Source="3" EffDt="2022-10-11">
<PhoneType>OTHER </PhoneType>
<Phone>123224434</Phone>
</PhoneNum>
</ContactInfo>
<ContactInfo Source="MB" EffDt="2022-10-11">
<PhoneNum Source="4" EffDt="2022-10-11">
<PhoneType>OTHER /WIRELESS</PhoneType>
<Phone>30000</Phone>
</PhoneNum>
</ContactInfo>最终,我需要能够以这种格式制作一张表格:
<table>
<tr>
<td>Address</td>
<td>Phone</td>
</tr>
</table>我在这里应该怎么做?我主要是使用for-每个循环和选择,但我似乎无法找到一种方法,使他们在这里工作。我看了一些分组,但我也不能应用,所以我有点被困在这个。任何帮助都将不胜感激。
发布于 2022-10-12 19:57:58
XSLT有一个内置的机制来解析交叉引用。下面是一个很小的例子:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="phone" match="PhoneNum" use="@Source" />
<xsl:template match="/*">
<table border="1">
<xsl:for-each select="ContactInfo/PostAddr">
<tr>
<td>
<xsl:value-of select="City"/>
</td>
<td>
<xsl:value-of select="key('phone', AddrSource)/Phone"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>应用于输入示例-在添加根元素之后!-这将返回:
结果
<?xml version="1.0" encoding="UTF-8"?>
<table border="1">
<tr>
<td>MONTGOMERY</td>
<td>123224434</td>
</tr>
<tr>
<td>PRATTVILLE</td>
<td>30000</td>
</tr>
</table>https://stackoverflow.com/questions/74047257
复制相似问题