如何将XML文本转换为表格格式

2023-12-02

在下面的示例中,我们尝试将 XML 数据转换为 HTML,但这里我们面临着由于元素不一致而面临的挑战,如 '' 和 '

' :

Note#如果我们从“”中删除“

”元素,则 xslt 代码可以正常工作。

参考网址: https://xsltfiddle.liberty-development.net/nbiE1aA/1

INPUT XML: enter image description here

<?xml version="1.0" encoding="UTF-8"?>
<NM_TORP_TABLE>
<NM_TORP_TABLE_LIST>
    <NM_TORP_LABEL>Nr</NM_TORP_LABEL>
    <NM_TANDP_TITLE>1</NM_TANDP_TITLE>
    <NM_TORPCOLUMN_DATA>1<BR/>2<BR/>2.1<BR/>2.2<BR/>2.3<BR/>2.4<BR/>2.5<BR/>2.6<BR/>2.7<BR/>2.8<BR/>2.9<BR/>2.10<BR/>2.11<BR/>2.12<BR/>2.13<BR/>2.14<BR/>2.15<BR/>2.16<BR/>2.17<BR/>2.18<BR/>2.19<BR/>2.20<BR/>3<BR/>3.1<BR/>3.2<BR/>3.3<BR/>3.4<BR/>3.5<BR/>3.6<BR/>3.7<BR/>3.8<BR/>3.9<BR/>3.10<BR/>3.11<BR/>3.12<BR/>3.13<BR/>3.14<BR/>3.15<BR/>3.16<BR/>3.17<BR/>3.18<BR/>3.19<BR/>3.20</NM_TORPCOLUMN_DATA>
</NM_TORP_TABLE_LIST>
<NM_TORP_TABLE_LIST>
    <NM_TORP_LABEL>Description</NM_TORP_LABEL>
    <NM_TANDP_TITLE>2</NM_TANDP_TITLE>
    <NM_TORPCOLUMN_DATA><P>BTJT-B Platform<BR/>Offshore Pipeline 16â€from Platform BTJT-B to Platform BTJT-A<BR/>BTJT-B Platform<BR/>Subsea Riser Flange BTJT-B<BR/>IP-01<BR/>KP.0+000<BR/>KP.0+500<BR/>KP.1+000<BR/>KP.1+500<BR/>KP.2+000<BR/>KP.2+500<BR/>KP.3+000<BR/>KP Target Box / Subsea<BR/>IP-02<BR/>Subsea Flange / Middle Spool<BR/>Subsea Flange / Middle Spool<BR/>Subsea Flange / Middle Spool<BR/>IP-03<BR/>Subsea Flange / Middle Spool<BR/>IP-04<BR/>Subsea Riser Flange BTJT-A<BR/>Existing BTJT-A Platform<BR/>Offshore Pipeline from Platform BTJT-A to Platform BTJT-B<BR/>Existing BTJT-A Platform<BR/>Subsea Riser Flange BTJT-A<BR/>IP-01<BR/>Subsea Flange (Riser Spool)<BR/>IP-02<BR/>Subsea Flange / Middle Spool<BR/>Subsea Flange / Middle Spool<BR/>Subsea Flange / Middle Spool<BR/>IP-02<BR/>Target Box / Subsea<BR/>KP.0+500<BR/>KP.1+000<BR/>KP.1+500<BR/>KP.2+000<BR/>KP.2+500<BR/>KP.3+000<BR/>Target Box / Subsea<BR/>IP-04<BR/>Subsea Riser Flange TJT-B<BR/>BTJT-B Platform</P>
    </NM_TORPCOLUMN_DATA>
</NM_TORP_TABLE_LIST>
<NM_TORP_TABLE_LIST>
    <NM_TORP_LABEL>Latitude</NM_TORP_LABEL>
    <NM_TANDP_TITLE>3</NM_TANDP_TITLE>
    <NM_TORPCOLUMN_DATA>
        <P>06-38-11.314S</P>
        <P>06-38-11.314S<BR/>06-38-10.725S<BR/>06-38-10.505S<BR/>06-38-10.283S<BR/>06-37-56.584S<BR/>06-37-42.885S<BR/>06-37-29.185S<BR/>06-37-15.486S<BR/>06-36-01.787S<BR/>06-36-48.087S<BR/>06-36-45.917S<BR/>06-36-45.790S<BR/>06-36-46.018S<BR/>06-36-46.668S<BR/>06-36-47.318S<BR/>06-36-47.976S<BR/>06-36-47.828S<BR/>06-36-46.499S<BR/>06-36-46.256S<BR/>06-36-45.409S</P>
        <P>06-36-45.409S<BR/>06-36-46.250S<BR/>06-36-46.438S<BR/>06-36-47.794S<BR/>06-36-47.871S<BR/>06-36-47.213S<BR/>06-36-46.558S<BR/>06-36-45.903S<BR/>06-36-45.553S<BR/>06-36-45.656S<BR/>06-36-50.239S<BR/>06-37-03.954S<BR/>06-37-17.670S<BR/>06-37-31.385S<BR/>06-37-45.100S<BR/>06-37-58.815S<BR/>06-38-10.096S<BR/>06-38-10.211S<BR/>06-38-10.818S<BR/>06-38-11.314S</P>
    </NM_TORPCOLUMN_DATA>
</NM_TORP_TABLE_LIST>
<NM_TORP_TABLE_LIST>
    <NM_TORP_LABEL>Longitude</NM_TORP_LABEL>
    <NM_TANDP_TITLE>4</NM_TANDP_TITLE>
    <NM_TORPCOLUMN_DATA>
        <P>113-19-37.766E</P>
        <P>113-19-37.766E<BR/>113-19-38.534E<BR/>113-19-38.609E<BR/>113-19-38.609E<BR/>113-19-29.831E<BR/>113-19-21.053E<BR/>113-19-12.275E<BR/>113-19-3.498E<BR/>113-18-54.721E<BR/>113-18-45.944E<BR/>113-18-45.944E<BR/>113-18-44.479E<BR/>113-18-43.461E<BR/>113-18-43.566E<BR/>113-18-37.67E<BR/>113-18-34.743E<BR/>113-18-34.53E<BR/>113-18-32.699E<BR/>113-18-32.876E<BR/>113-18-33.453E</P>
        <P>113-18-33.453E<BR/>113-18-32.92E<BR/>113-18-32.783E<BR/>113-18-34.65E<BR/>113-18-34.756E<BR/>113-18-37.687E<BR/>113-18-40.608E<BR/>113-18-43.529E<BR/>113-18-45.086E<BR/>113-18-45.152E<BR/>113-18-48.076E<BR/>113-18-56.829E<BR/>113-19-5.581E<BR/>113-19-14.334E<BR/>113-19-23.086E<BR/>113-19-31.839E<BR/>113-19-39.039E<BR/>113-19-39.112E<BR/>113-19-38.511E<BR/>113-19-37.766E</P>
    </NM_TORPCOLUMN_DATA>
</NM_TORP_TABLE_LIST>
</NM_TORP_TABLE>

预期输出:

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<table style="font-style:italic; margin-left:100px;" cellpadding="10" cellspacing="0" border="1">
<tbody>
    <tr>
        <th>Nr</th>
        <th>Description</th>
        <th>Latitude</th>
        <th>Longitude</th>
    </tr>
    <tr>
        <td>1</td>
        <td>BTJT-B Platform</td>
        <td> 06-38-11.314S</td>
        <td> 113-19-37.766E</td>
    </tr>
    <tr>
        <td>2</td>
        <td>Offshore Pipeline 16â€from Platform BTJT-B to Platform BTJT-A</td>
        <td> 06-38-11.314S</td>
        <td> 113-19-37.766E</td>
    </tr>
    <tr>
        <td>2.1</td>
        <td>BTJT-B Platform</td>
        <td>06-38-10.725S</td>
        <td>113-19-38.534E</td>
    </tr>
    <tr>
        <td>2.2</td>
        <td>Subsea Riser Flange BTJT-B</td>
        <td>06-38-10.505S</td>
        <td>113-19-38.609E</td>
    </tr>
    ............
</tbody>
</table>

XSLT 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <xsl:for-each select="./NM_TORP_TABLE">
        <xsl:variable name="cols" select="NM_TORP_TABLE_LIST" />
        <table style="font-style:italic; margin-left:100px;" cellpadding="10" cellspacing="0" border="1">
            <tbody>
                <tr>
                    <xsl:for-each select="$cols">
                        <th>
                            <xsl:value-of select="NM_TORP_LABEL"/>
                        </th>
                    </xsl:for-each>
                </tr>
                <xsl:for-each select="NM_TORP_TABLE_LIST[1]/NM_TORPCOLUMN_DATA/text()">
                    <xsl:variable name="row" select="position()" />
                    <tr>
                        <xsl:for-each select="$cols">
                            <td>
                                <xsl:value-of select="NM_TORPCOLUMN_DATA/text()[$row]"/>
                                <!--<xsl:value-of select="NM_TORPCOLUMN_DATA/text()[$row] | NM_TORPCOLUMN_DATA/P/text()[$row]"/>-->
                            </td>
                        </xsl:for-each>
                    </tr>
                </xsl:for-each>
            </tbody>
        </table>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我想你想要<xsl:value-of select="NM_TORPCOLUMN_DATA/descendant::text()[normalize-space()][$row]"/>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将XML文本转换为表格格式 的相关文章

  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • 如何使用 Python Selenium 选择具有相同类名但不同条件的第一个 div

    Python Selenium 新手 我想选择第三个 div class inner TPBYkbxL 从以下3 div 具有相同类名的类 我不确定是什么意思 lt data is fake main panel true or false
  • Xpath 测试祖先属性不等于字符串

    我正在尝试测试元素祖先的属性是否不等于字符串 这是我的 XML
  • XML-RPC 和 SOAP 有什么区别?

    我从来没有真正理解为什么 Web 服务实施者会选择其中之一 XML RPC 通常出现在较旧的系统中吗 任何有助于理解这一点的帮助将不胜感激 差异 SOAP 更强大 并且更受软件工具供应商 MSFT NET Java 企业版等 的青睐 SOA
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • 使用 Jackson 使用不带注释的属性来序列化 xml

    我目前正在使用 Jackson 编写一些代码 将遗留 POJO 序列化为 XML 但我需要使用属性而不是子元素来序列化它们 有没有办法使用 Jackson 来做到这一点 而不需要向遗留类添加注释 有没有办法使用 Jackson 来做到这一点
  • xsd 类型的 JAXB(取消)编组:xsd:base64Binary 和 xsd:hexBinary

    JAXB 映射两者xsd base64Binary and xsd hexBinary类型为byte 鉴于我有一个模式 一个 DOM 元素来表示这些类型 例如
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何使用XPath选择非空段落?

    我想要抓取的网页具有类似的结构 每个都有一个段落是一个问题 一个段落是一个答案 我想抓取每个问题和答案并将它们存储在两个项目中 问题是 在某些页面上 问题和答案分别是 xxx p 1 and xxx p 2 但在其他页面上 xxx p 1
  • 自定义 XML 文件比较

    我看过很多关于 XML 比较的帖子 但我看过的没有一个能解决我的问题 我们有一些 XML 格式的文本文档 产品描述 带有标题和段落 正在更新 即版本化 我的任务是制作变更摘要 也就是说 我们想要获取两个连续的文件并生成第三个 标题结构 大纲
  • JAXB 不会解组接口列表

    看来 JAXB 无法读取它所写的内容 考虑以下代码 interface IFoo void jump XmlRootElement class Bar implements IFoo XmlElement public String y p
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • 使用 XSLT 1.0 将平面 XML 表数据(其中元素由行和列名称串联而成)转换为嵌套 XML

    我有 XML 输出 表示输出的数据表 如下所示
  • D3 将现有 SVG 字符串(或元素)追加(插入)到 DIV

    我到处寻找这个问题的答案 并找到了一些我认为可能有用的资源 但最终没有让我找到答案 这里有一些 外部SVG http bl ocks org mbostock 1014829 嵌入SVG https stackoverflow com qu
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • & 在 XML 代码中导致错误的符号

    我有以下 XML 代码 用于过滤我的 Crm Dynamics 表单中的查找字段 该过滤器根据输入帐户字段的数据使用 但是 帐户字段可以包含 符号 当出现时 会发生错误 表明 XML 格式不正确 有人有解决问题的办法吗 function a
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co

随机推荐