首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT帮助分组或匹配节点

XSLT帮助分组或匹配节点
EN

Stack Overflow用户
提问于 2022-10-12 19:43:24
回答 1查看 46关注 0票数 0

我有这个XML,它是一系列ContactInfo节点,一些包含PostAddr,还有一些包含PhoneNum。我必须将包含地址的ContactInfo节点与包含PhoneNum的节点匹配-- AddrSource标记值(在包含地址的ContactInfo节点中)应该匹配PhoneNum Source属性值(来自包含电话的ContactInfo节点)。

这是XML的一个示例:

代码语言:javascript
复制
<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>

最终,我需要能够以这种格式制作一张表格:

代码语言:javascript
复制
<table>
    <tr>
        <td>Address</td>
        <td>Phone</td>
    </tr>
</table>

我在这里应该怎么做?我主要是使用for-每个循环和选择,但我似乎无法找到一种方法,使他们在这里工作。我看了一些分组,但我也不能应用,所以我有点被困在这个。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 19:57:58

XSLT有一个内置的机制来解析交叉引用。下面是一个很小的例子:

XSLT1.0

代码语言:javascript
复制
<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>

应用于输入示例-在添加根元素之后!-这将返回:

结果

代码语言:javascript
复制
<?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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74047257

复制
相关文章

相似问题

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