0

HTML を含む大きな XML ファイルがあります。

<Orchard>
  <Recipe>
    <Name>Generated by Orchard.ImportExport</Name>
    <Author>admin</Author>
  </Recipe>
  <Data>
    <BodyPart Text="<p>My HTML</p><p align ="center">blah blah</p>"/>
  </Data>
</Orchard>

HTML をエンコードしたいのですが、XML はエンコードされていません。正規表現を試してみましたが、解決策が思いつきませんでした。

何か案は?

乾杯

4

3 に答える 3

1

シンプルなハンドコーディングのソリューションが必要な場合:

<Orchard>
  <Recipe>
    <Name>Generated by Orchard.ImportExport</Name>
    <Author>admin</Author>
  </Recipe>
  <Data>
    <BodyPart><Text><![CDATA[<p>My HTML</p><p align ="center">blah blah</p>]]></Text></BodyPart>
  </Data>
</Orchard>

...しかし、テキスト "]]>" が HTML に存在する場合は、エスケープする必要があることに注意してください。

ファイルの構造を変更できない場合は、DOM を使用して属性を見つけます。アンパサンド ( を使用&amp;) とカプセル化引用符 (この場合は二重引用符 -- ) のみをエスケープする必要があります&quot;

使用しているサーバー側の言語と、XML を変更できるかどうかを示すことができます。

于 2012-05-23T01:04:33.200 に答える
0

これが私の解決策です(私が知っている最も良い方法ではありませんが、うまくいきました):Brett Zamirが提案したように、HTMLをCDATAに移動しました。次に、XMLを解析し、すべてのBodyPartアイテムを見つけて、内部のHTMLをエスケープする小さなプログラムを作成しました。次に、エスケープされたHTMLをText属性に移動し、内部テキストを削除しました。

于 2012-05-23T21:28:44.150 に答える
0

BodyPartDriver を独自のプロジェクトにコピーして、Import メソッドと Export メソッドをオーバーライドすることもできます。このようにして、好きなように暗号化/エンコードできます。通常の BodyPartDriver からの Import/Export 後に実行されます。

[UsedImplicitly]
public class BodyPartDriver : ContentPartDriver<BodyPart>
{
    protected override void Importing( BodyPart part, ImportContentContext context )
    {
       //Do your decoding here
        var importedText = context.Attribute( part.PartDefinition.Name, "Text" );
        if ( importedText != null )
        {
            part.Text = importedText;
        }
    }

    protected override void Exporting( BodyPart part, ExportContentContext context )
    {
        //Do your encoding here
        context.Element( part.PartDefinition.Name ).SetAttributeValue( "Text", part.Text );
    }
}
于 2014-11-20T08:50:28.237 に答える