gpt4 book ai didi

c# - 撒克逊 XSLT : Serializer producing weird indents

转载 作者:行者123 更新时间:2023-11-30 22:00:41 26 4
gpt4 key购买 nike

我正在使用 Saxon HE 9.5.1.8 将 XML 转换为另一个 XML 文件。

我的问题是,由 Saxon 的 Serializer() 类编写的 XML 内容会打印出几个我不想在其中出现的额外缩进。我假设这是“错误的”,因为我在使用 DomDestination() 类(但随后缺少外部 XML 文档信息)或其他 XSL 转换器(如 Visual Studio/.NET 附带的转换器)时得到了预期的输出框架。

这是输入 XML:

<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>$44.95</price>
<publish_date>2000-10-01</publish_date>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>$5.95</price>
<publish_date>2000-12-16</publish_date>
</book>

这是 XLST 文件:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>

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

<xsl:template match="book">
<book>
<xsl:copy-of select="@*|book/@*" />
<xsl:for-each select="*">
<xsl:attribute name="{name()}">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:for-each>
</book>
</xsl:template>

</xsl:stylesheet>

这是预期的输出:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<book id="bk101" author="Gambardella, Matthew" title="XML Developer's Guide" genre="Computer" price="$44.95" publish_date="2000-10-01" />
<book id="bk102" author="Ralls, Kim" title="Midnight Rain" genre="Fantasy" price="$5.95" publish_date="2000-12-16" />
</catalog>

这是使用 Saxon 时的输出:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk101"
author="Gambardella, Matthew"
title="XML Developer's Guide"
genre="Computer"
price="$44.95"
publish_date="2000-10-01"/>
<book id="bk102"
author="Ralls, Kim"
title="Midnight Rain"
genre="Fantasy"
price="$5.95"
publish_date="2000-12-16"/>
</catalog>

有谁知道如何抑制或修改 Saxon 的这种行为?这是用于调用 Saxon API 的 C# 代码:

public Stream Transform(string xmlFilePath, string xsltFilePath)
{
var result = new MemoryStream();

var xslt = new FileInfo(xsltFilePath);
var input = new FileInfo(xmlFilePath);

var processor = new Processor();
var compiler = processor.NewXsltCompiler();
var executable = compiler.Compile(new Uri(xslt.FullName));

var destination = new Serializer();
destination.SetOutputStream(result);

using(var inputStream = input.OpenRead())
{
var transformer = executable.Load();
transformer.SetInputStream(inputStream, new Uri(input.DirectoryName));
transformer.Run(destination);
}
result.Position = 0;
return result;
}

最佳答案

尝试设置 http://saxonica.com/documentation9.5/extensions/output-extras/line-length.html为一个非常大的值以避免将属性放在新行上:<xsl:output xmlns:saxon="http://saxon.sf.net/" saxon:line-length="1000"/> .

关于c# - 撒克逊 XSLT : Serializer producing weird indents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com