根据节点名称插入制表符和 CR/LF
insert tab and CR/LF based on the node name
我有一个 XML 文件,其中包含运动结果,但需要对其进行格式化和组织以便更好 reading/understanding,我认为格式化应该基于节点的名称(测试可能是节点名称?),如果名称是 "tab" 然后插入一个选项卡...我的 xml 文件如下:
<?xml version="1.0"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Header>
</Header>
<Body><p><p><b><u>Wednesday 14 December 2016</u></b></p><p></p><p>10:30<tab>Atletico Nacional </tab><tab>v</tab><tab>Kashima Antlers </tab><i><tab><tab>(Suita City Football Stadium)</tab></tab></i><b><tab><tab></tab></tab></b></p></p><p><p><b><u>Thursday 15 December 2016</u></b></p><p></p><p>10:30<tab>Club America </tab><tab>v</tab><tab>Real Madrid </tab><i><tab><tab>(Yokohama International Stadium)</tab></tab></i><b><tab><tab></tab></tab></b></p></p></Body>
</Message>
预期的结果应该是这样的:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<!DOCTYPE NEWS SYSTEM "structure.dtd">
<OBJECT>
<ID>12345</ID>
<HEADER>SPORTS NEWS</HEADER>
<OBJECT_BODY>
Wednesday 14 December 2016
10:30 Atletico Nacional v Kashima Antlers *(Suita City Football Stadium)*
Thursday 15 December 2016
10:30 Club America v Real Madrid *(Yokohama International Stadium)*
</OBJECT_BODY>
</OBJECT>
非常感谢您的帮助和支持,非常感谢!
我不能说我完全明白你是如何达到预期输出的,但试试这个作为你的起点:
XSLT 1.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:strip-space elements="*"/>
<xsl:template match="/Message">
<OBJECT>
<ID>12345</ID>
<HEADER>SPORTS NEWS</HEADER>
<xsl:apply-templates select="Body"/>
</OBJECT>
</xsl:template>
<xsl:template match="Body">
<OBJECT_BODY>
<xsl:apply-templates/>
</OBJECT_BODY>
</xsl:template>
<xsl:template match="p">
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="tab">
<xsl:text>	</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="i">
<xsl:text>*</xsl:text>
<xsl:apply-templates/>
<xsl:text>*</xsl:text>
</xsl:template>
</xsl:stylesheet>
如有必要,添加额外的模板来处理 b
和 u
元素。
我有一个 XML 文件,其中包含运动结果,但需要对其进行格式化和组织以便更好 reading/understanding,我认为格式化应该基于节点的名称(测试可能是节点名称?),如果名称是 "tab" 然后插入一个选项卡...我的 xml 文件如下:
<?xml version="1.0"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Header>
</Header>
<Body><p><p><b><u>Wednesday 14 December 2016</u></b></p><p></p><p>10:30<tab>Atletico Nacional </tab><tab>v</tab><tab>Kashima Antlers </tab><i><tab><tab>(Suita City Football Stadium)</tab></tab></i><b><tab><tab></tab></tab></b></p></p><p><p><b><u>Thursday 15 December 2016</u></b></p><p></p><p>10:30<tab>Club America </tab><tab>v</tab><tab>Real Madrid </tab><i><tab><tab>(Yokohama International Stadium)</tab></tab></i><b><tab><tab></tab></tab></b></p></p></Body>
</Message>
预期的结果应该是这样的:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<!DOCTYPE NEWS SYSTEM "structure.dtd">
<OBJECT>
<ID>12345</ID>
<HEADER>SPORTS NEWS</HEADER>
<OBJECT_BODY>
Wednesday 14 December 2016
10:30 Atletico Nacional v Kashima Antlers *(Suita City Football Stadium)*
Thursday 15 December 2016
10:30 Club America v Real Madrid *(Yokohama International Stadium)*
</OBJECT_BODY>
</OBJECT>
非常感谢您的帮助和支持,非常感谢!
我不能说我完全明白你是如何达到预期输出的,但试试这个作为你的起点:
XSLT 1.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:strip-space elements="*"/>
<xsl:template match="/Message">
<OBJECT>
<ID>12345</ID>
<HEADER>SPORTS NEWS</HEADER>
<xsl:apply-templates select="Body"/>
</OBJECT>
</xsl:template>
<xsl:template match="Body">
<OBJECT_BODY>
<xsl:apply-templates/>
</OBJECT_BODY>
</xsl:template>
<xsl:template match="p">
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="tab">
<xsl:text>	</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="i">
<xsl:text>*</xsl:text>
<xsl:apply-templates/>
<xsl:text>*</xsl:text>
</xsl:template>
</xsl:stylesheet>
如有必要,添加额外的模板来处理 b
和 u
元素。