2011-07-21 1 views
1

XMLから位置情報ファイルを作成しようとしています。フィールドがスペースで埋められていない限り、XSLTを作成して正常に動作します。その場合、XSLは1つのスペースしか返しません。私はMSXML(6.0)を使用しています。XMLを位置指定のテキストファイルに変換する際のヘルプです。

私は運で次のことを試してみました:ここ

<xsl:strip-space elements="*"/> 
<xsl:preserve-space elements="*"/> 

<fo:block white-space-collapse="false" white-space-treatment="preserve" > 
    <!-- Code here --> 
</fo:block> 

は、XML入力、XSLTと出力されます。

<Document> 
     <Header> 
     <Title>Long life to the queen </Title> 
     <Author>Sam Catnip  </Author> 
     <Year>1996</Year> 
     <Edition> 1</Edition> 
     <Price>   12.99</Price> 
     <Pages> 1244</Pages> 
     <AuthorNotes>     </AuthorNotes> 
     <Abstract>It is a great book </Abstract> 
    </Header> 
     <Header> 
     <Title>Life and live longer  </Title> 
     <Author>Bill Griffin </Author> 
     <Year>2001</Year> 
     <Edition> 1</Edition> 
     <Price>   2.99</Price> 
     <Pages>  44</Pages> 
     <AuthorNotes>Yeah, right   </AuthorNotes> 
     <Abstract>Wishfull thinking </Abstract> 
    </Header> 
</Document> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:output method="text"/> 
    <xsl:template match="//Document"> 
     <xsl:for-each select="./Header"> 
      <xsl:value-of select="./Title"/> 
      <xsl:value-of select="./Author"/> 
      <xsl:value-of select="./Year"/> 
      <xsl:value-of select="./Edition"/> 
      <xsl:value-of select="./Price"/>   
      <xsl:value-of select="./Pages"/> 
      <xsl:value-of select="./AuthorNotes"/> 
      <xsl:value-of select="./Abstract"/> 
      <xsl:text>&#13;&#10;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

出力:

Long life to the queen Sam Catnip  1996 1   12.99 1244It is a great book 
Life and live longer  Bill Griffin 2001 1   2.99  44Yeah, right   Wishfull thinking  

それは次のようになります。

Long life to the queen Sam Catnip  1996 1   12.99 1244     It is a great book 
Life and live longer  Bill Griffin 2001 1   2.99  44Yeah, right   Wishfull thinking  

私は本当にこの問題を解決する方法上の任意のアイデアを理解するだろう。あなたXSLTは空白を保持するための命令が含まれている場合でも、あなたの入力XML文書は、あなたのXSLTに渡される前に解析されたとき

おかげで、

アーティ

+0

テンプレートは望ましい出力(MSXML 6.0)を生成します –

答えて

2

は、それが保存されていない可能性があります。

それは、特定のソリューションを提供することは困難ですので、あなたは、どのような言語/プラットフォームまたは使用している何も指定しませんでしたが、あなたは、このようなXML文書を読めば、私はC#で知っている:

string xmlSource = @"<Document>etc..</Document>"; 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xmlSource); 

既に空白の要素を空の要素として扱い、docは既にスタイルシートを適用しようとする前にその空白を取り除いています。

は、C#では、あなたはこれを実行する必要があります。

XmlDocument doc = new XmlDocument { PreserveWhitespace = true }; 

あなたもそれをロードする前に、それをインスタンス化するとき。別のプラットフォームを使用している場合、プラットフォームがどのようにこれを行うのかを調べる必要があります。

(面倒な少しはあるが)、より一般的なソリューションは、このようなあなたの入力XMLを変更することです:

... 
    <AuthorNotes xml:space="preserve">     </AuthorNotes> 
... 

私はあなたがルート要素にこれを適用することができると思うが、私は100%確実ではありませんよそれ。

+0

ありがとうFlynn、 ルート要素の<... xml:space = "preserve">で動作しました。 – Arty

関連する問題