5

ドキュメントごとにxml宣言セクションを変更するか、宣言を除いたデータを選択する必要があります。どちらが簡単ですか?

これは私のxmlがどのように見えるかの例です:

<?xml version="1.0" encoding="utf-16"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master page-height="11in" page-width="8.5in" margin-top="0.50in" margin-left="0.8in" margin-right="0.8in" margin-bottom="0.25in" master-name="PageMaster">
            <fo:region-body border-style="none" border-width="thin" margin-top="0in" margin-left="0in" margin-right="0in" margin-bottom="0.25in"/>
            <fo:region-after border-style="none" border-width="thin" extent="0.25in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="PageMaster"/>
</fo:root>

xml宣言を次のように変更しようとしています:

<?xml version="1.0" encoding="iso-8859-1"?>
4

2 に答える 2

9

プログラムでXMLを変更しようとしていますか?その場合は、以下に示すように、新しいものを作成XmlDeclarationして前のものと置き換えることでこれを行うことができます。

XmlDeclaration xmlDeclaration;
xmlDeclaration = doc.CreateXmlDeclaration("1.0", "iso-8859-1", null);
doc.ReplaceChild(xmlDeclaration, doc.FirstChild);

ドキュメントの最初の子がXml宣言であることを確認する必要があります。

于 2012-04-24T14:05:45.017 に答える
1

XSLTを使用すると、必要な「XML宣言の変更」を非常に簡単に行うことができます(この変更が問題の正しい解決策であるかどうかについてはコメントしません)。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output indent="yes" encoding="ISO-8859-1"/>

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

この変換を提供されたXMLドキュメントに適用するだけです。

<?xml version="1.0" encoding="utf-16"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master page-height="11in" page-width="8.5in" margin-top="0.50in" margin-left="0.8in" margin-right="0.8in" margin-bottom="0.25in" master-name="PageMaster">
            <fo:region-body border-style="none" border-width="thin" margin-top="0in" margin-left="0in" margin-right="0in" margin-bottom="0.25in"/>
            <fo:region-after border-style="none" border-width="thin" extent="0.25in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="PageMaster"/>
</fo:root>

そして、望ましい結果が生成されます:

<?xml version="1.0" encoding="iso-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master page-height="11in" page-width="8.5in" margin-top="0.50in" margin-left="0.8in" margin-right="0.8in" margin-bottom="0.25in" master-name="PageMaster">
            <fo:region-body border-style="none" border-width="thin" margin-top="0in" margin-left="0in" margin-right="0in" margin-bottom="0.25in" />
            <fo:region-after border-style="none" border-width="thin" extent="0.25in" />
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="PageMaster" />
于 2012-04-25T02:22:42.703 に答える