xml - 使用 xslt 从 xml 输入中删除换行符
问题描述
对于一个在标签中带有换行符的输入 xml,解析样式表 xsl 的输出包括原始换行符。我需要删除输出中的换行符以获得字段分号分隔的输出。xml输入:
<?xml version="1.0" encoding="UTF-8"?>
<CONSOLIDATED_LIST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://test/test.xsd" dateGenerated="2012-08-08T19:03:43.593-04:00">
<INDIVIDUALS>
<INDIVIDUAL><DATAID>5</DATAID><VERSIONNUM>1</VERSIONNUM><FIRST_NAME> TEST </FIRST_NAME><SECOND_NAME>TEST1</SECOND_NAME><THIRD_NAME/><UN_LIST_TYPE></UN_LIST_TYPE><REFERENCE_NUMBER></REFERENCE_NUMBER><LISTED_ON>2016-11-30</LISTED_ON><COMMENTS1></COMMENTS1><DESIGNATION><VALUE></VALUE></DESIGNATION><NATIONALITY><VALUE></VALUE></NATIONALITY><LIST_TYPE><VALUE></VALUE></LIST_TYPE><LAST_DAY_UPDATED><VALUE/></LAST_DAY_UPDATED><INDIVIDUAL_ALIAS><QUALITY/><ALIAS_NAME/></INDIVIDUAL_ALIAS><INDIVIDUAL_ADDRESS><COUNTRY/></INDIVIDUAL_ADDRESS><INDIVIDUAL_DATE_OF_BIRTH><TYPE_OF_DATE>EXACT</TYPE_OF_DATE><DATE>1964-07-17</DATE></INDIVIDUAL_DATE_OF_BIRTH><INDIVIDUAL_PLACE_OF_BIRTH/><INDIVIDUAL_DOCUMENT><TYPE_OF_DOCUMENT></TYPE_OF_DOCUMENT><NUMBER></NUMBER></INDIVIDUAL_DOCUMENT><SORT_KEY/><SORT_KEY_LAST_MOD/></INDIVIDUAL>
<INDIVIDUAL><DATAID></DATAID><VERSIONNUM></VERSIONNUM><FIRST_NAME>TEST</FIRST_NAME><SECOND_NAME>TEST2</SECOND_NAME><THIRD_NAME/><UN_LIST_TYPE></UN_LIST_TYPE><REFERENCE_NUMBER></REFERENCE_NUMBER><LISTED_ON>2016-11-30</LISTED_ON><COMMENTS1/><DESIGNATION><VALUE></VALUE></DESIGNATION><NATIONALITY><VALUE></VALUE></NATIONALITY><LIST_TYPE><VALUE></VALUE></LIST_TYPE><LAST_DAY_UPDATED><VALUE/></LAST_DAY_UPDATED><INDIVIDUAL_ALIAS><QUALITY></QUALITY><ALIAS_NAME></ALIAS_NAME></INDIVIDUAL_ALIAS><INDIVIDUAL_ADDRESS><COUNTRY/></INDIVIDUAL_ADDRESS><INDIVIDUAL_DATE_OF_BIRTH><TYPE_OF_DATE></TYPE_OF_DATE><DATE>1964-01-10</DATE></INDIVIDUAL_DATE_OF_BIRTH><INDIVIDUAL_PLACE_OF_BIRTH/><INDIVIDUAL_DOCUMENT/><SORT_KEY/><SORT_KEY_LAST_MOD/></INDIVIDUAL>
</INDIVIDUALS>
<ENTITIES>
<ENTITY><DATAID>1</DATAID><VERSIONNUM>1</VERSIONNUM><FIRST_NAME> TEST
</FIRST_NAME><SECOND_NAME>TEST SECOND
</SECOND_NAME><THIRD_NAME> TEST THIRD<THIRD_NAME></THIRD_NAME></THIRD_NAME><UN_LIST_TYPE></UN_LIST_TYPE><REFERENCE_NUMBER></REFERENCE_NUMBER><LISTED_ON>2012-09-11</LISTED_ON><COMMENTS1></COMMENTS1><LIST_TYPE><VALUE></VALUE></LIST_TYPE><LAST_DAY_UPDATED><VALUE/></LAST_DAY_UPDATED><ENTITY_ALIAS><QUALITY/><ALIAS_NAME/></ENTITY_ALIAS><ENTITY_ADDRESS><CITY></CITY><COUNTRY></COUNTRY></ENTITY_ADDRESS><SORT_KEY/><SORT_KEY_LAST_MOD/></ENTITY>
<ENTITY><DATAID>2</DATAID><VERSIONNUM>1</VERSIONNUM><FIRST_NAME> TEST
</FIRST_NAME><SECOND_NAME>TEST SECOND
</SECOND_NAME><THIRD_NAME> TEST THIRD
<THIRD_NAME></THIRD_NAME></THIRD_NAME><UN_LIST_TYPE></UN_LIST_TYPE><REFERENCE_NUMBER></REFERENCE_NUMBER><LISTED_ON>2012-09-11</LISTED_ON><COMMENTS1></COMMENTS1><LIST_TYPE><VALUE></VALUE></LIST_TYPE><LAST_DAY_UPDATED><VALUE/></LAST_DAY_UPDATED><ENTITY_ALIAS><QUALITY/><ALIAS_NAME/></ENTITY_ALIAS><ENTITY_ADDRESS><CITY>Pyongyang</CITY><COUNTRY></COUNTRY></ENTITY_ADDRESS><SORT_KEY/><SORT_KEY_LAST_MOD/></ENTITY>
</ENTITIES>
</CONSOLIDATED_LIST>
xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/CONSOLIDATED_LIST">
<!-- INDIVIDUALS -->
<!-- header -->
<xsl:text>Individuals: DataID;First_Name;Second_Name;Third_Name </xsl:text>
<!-- data -->
<xsl:for-each select="INDIVIDUALS/INDIVIDUAL">
<xsl:value-of select="DATAID"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="FIRST_NAME"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="SECOND_NAME"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="THIRD_NAME" />
<xsl:text> </xsl:text>
</xsl:for-each>
<!-- ENTITIES -->
<!-- header -->
<xsl:text>Entities: Dataid;First_Name;Second_Name </xsl:text>
<!-- data -->
<xsl:for-each select="ENTITIES/ENTITY">
<xsl:value-of select="DATAID"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="FIRST_NAME"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="SECOND_NAME" />
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
Individuals:
DataID;First_Name;Second_Name;Third_Name
5; TEST ;TEST1;
;TEST;TEST2;
Entities:
Dataid;First_Name;Second_name
1; TEST
;TEST SECOND
2; TEST
;TEST SECOND
预期结果:
Individuals:
DataID;First_Name;Second_Name;Third_Name
5; TEST ;TEST1;
;TEST;TEST2;
Entities:
Dataid;First_Name;Second_name
1; TEST;TEST SECOND
2; TEST;TEST SECOND
我尝试对原点执行 awk 以删除所有换行符,但我需要知道如何在 xslt 解析器中执行此操作。
解决方案
如果你想去掉你输出的元素值中的空白,例如,<xsl:value-of select="FIRST_NAME"/>
那么<xsl:value-of select="normalize-space(FIRST_NAME)"/>
在 XSLT 1 中使用可能会有所帮助(但也会将文本内的空格序列标准化为一个空格)。
推荐阅读
- javascript - 在 javascript 中更新 vuejs 列表项
- c# - RabbitMQ 将消息标记为死信
- visual-studio - 使用 Visual Studio 2019 Vers.16.2.5 构建 Uno 平台解决方案的问题
- python - 使用 for 循环创建数据框后创建 Pandas 数据框列表
- html - 我的网页无法在 IE 和 Firefox 中运行
- python - setuptools_scm 版本受 Cython 生成的 C 代码中的注释影响
- php - 使用 query_builder 时,如何使用 Symfony formbuilder 选择默认选项?
- javascript - jQuery - 设置和重置转换延迟
- javascript - 摩纳哥编辑器自动完成功能在哪里?
- c - 为什么 ALSA 播放速度过快?