XSLT之后XML输出中不需要的新属性



我想使用XSLT转换XML文件。在转换过程中,输出文件中添加了一些我无法理解的新属性。

输入XML文件(缩写(:

<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title/>
</titleStmt>
<publicationStmt>
<publisher/>
</publicationStmt>
<sourceDesc>
<p/>
</sourceDesc>
</fileDesc>
</teiHeader>
<text>
<body>
<pb n="1"/>
<p xml:id="uuid_f770d0a9-277a-42d5-a759-a02b05a29a49">
<lb xml:id="uuid_cf21b2a4-e5b2-4ced-a1b2-a4e5b29ced0a"/>This is 
<lb xml:id="uuid_dffd4def-3f7a-4d5b-bd4d-ef3f7abd5bf9"/> <rs type="person">an example</rs>.
</p>
</body>
</text>
</TEI>

XSLT样式表,用于删除与Saxon PE 9.9.1.7:一起使用的<lb/><rs>之间不需要的空白(上面输入文件中的第二行(

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tei="http://www.tei-c.org/ns/1.0"
exclude-result-prefixes="xs"
version="2.0">

<xsl:output method="xml" version="1.0" indent="no"/>

<xsl:template match="@* | node()" name="identity-copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy> 
</xsl:template>

<!-- lb followed by rs -->
<xsl:template match="text()[preceding-sibling::*[1][self::*:lb[@*]]][following-sibling::*[1][self::*:rs[@*]]][string-length(normalize-space()) = 0]"/>

</xsl:stylesheet>

在输出的XML文件中,有一些新的属性添加到元素中,我甚至没有在样式表中处理这些属性例如,将@status='draft'添加到<revisionDesc>/<change>(不在输入示例中(并且将@part='N'添加到<p>。我可以列举更多的例子,但我认为这是一个普遍的问题。我该如何避免这种情况?

提前感谢!

如果您使用的是Saxon,则可以选择禁止扩展模式或DTD定义的默认属性值。(虽然它不适用于所有的XML解析器,但有些解析器没有这个选项(。在"氧气"中;配置转换场景";对话框中,它会显示一个复选框"扩展属性默认值(-Expand("。

在氧气中"松弛NG";偏好页面上有一个";添加默认属性"可以取消选中的复选框:https://www.oxygenxml.com/doc/versions/23.1/ug-editor/topics/relax-ng-preferences-page.html

最新更新