0

Evernoteのメモをスケジュールに従ってOutlookにエクスポートするユーティリティを作成しています。Outlook APIにはプレーンテキストが必要であり、EvernoteはプレーンテキストノートのXHTMLドキュメントバージョンを出力します。必要なのは、すべてのタグを取り除き、Evernoteエクスポートファイルに埋め込まれているソースXHTMLドキュメントのエスケープを解除することです。

基本的に私は向きを変える必要があります。

<note>
  <title>Test Sync Note 1</title> 
  <content>
  <![CDATA[ <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml.dtd">

<en-note bgcolor="#FFFFFF">
<div>Test Sync Note 1</div>
<div>This i has some text in it</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>and a second line</div>
</en-note>

  ]]> 
  </content>
  <created>20081028T045727Z</created> 
  <updated>20081028T051346Z</updated> 
  <tag>Test</tag> 
</note>

の中へ

    テスト同期注1
    これにはいくつかのテキストがあります


    と2行目

CDATAセクションを簡単に解析して、4行のテキストだけを取得できますが、divを削除し、エスケープを解除して、そこに潜んでいる可能性のある余分なHTMLを処理する信頼できる方法が必要です。

その仕事をするMSAPIコンボがあると思いますが、私にはわかりません。

4

5 に答える 5

1

HTML Agility Packを使用できます。

于 2008-10-28T15:36:29.950 に答える
1

正規表現を使用してすべての HTML タグを削除します。これは非常に基本的なものです。希望どおりに機能しない場合は、微調整できると確信しています。

Regex.Replace("<div>your html in here</div>",@"<(.|\n)*?>",string.Empty);

于 2008-10-28T07:15:59.913 に答える
1

xslt 変換を使用して、xml をテキスト ドキュメントに変換することもできます。

于 2008-10-28T07:42:24.540 に答える
0

私の知る限り、その特定の仕事をすることは何もありませんが、XSLTを使用するか、IXPathNavigableをウォークスルーすることを検討することをお勧めします。

于 2008-10-28T05:55:02.307 に答える
0
        string xml = @"<note>
          <title>Test Sync Note 1</title> 
          <content>
          <![CDATA[ <?xml version=""1.0"" encoding=""UTF-8""?>
           <!DOCTYPE en-note SYSTEM ""http://xml.evernote.com/pub/enml.dtd"">

        <en-note bgcolor=""#FFFFFF"">
        <div>Test Sync Note 1</div>
        <div>This i has some text in it</div>
        <div> </div>
        <div> </div>
        <div>and a second line</div>
        </en-note>

          ]]> 
          </content>
          <created>20081028T045727Z</created> 
          <updated>20081028T051346Z</updated> 
          <tag>Test</tag> 
        </note>
        ";
        XPathDocument doc = new XPathDocument(new StringReader(xml));
        XPathNavigator nav = doc.CreateNavigator();

        // Compile a standard XPath expression

        XPathExpression expr;
        expr = nav.Compile("/note/content");
        XPathNodeIterator iterator = nav.Select(expr);

        // Iterate on the node set

        try
        {
            while (iterator.MoveNext())
            {
                //Get the XML in the CDATA
                XPathNavigator nav2 = iterator.Current.Clone();
                XPathDocument doc2 = new XPathDocument(new StringReader(nav2.Value.Trim()));

                //Parse the XML in the CDATA
                XPathNavigator nav3 = doc2.CreateNavigator();
                expr = nav3.Compile("/en-note");
                XPathNodeIterator iterator2 = nav3.Select(expr);
                iterator2.MoveNext();
                XPathNavigator nav4 = iterator2.Current.Clone();

                //Output the value directly, does not preserve the formatting
                Console.WriteLine("Direct Try:");
                Console.WriteLine(nav4.Value);

                //This works, but is ugly
                Console.WriteLine("Ugly Try:");
                Console.WriteLine(nav4.InnerXml.Replace("<div>","").Replace("</div>",Environment.NewLine));
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
于 2008-10-28T06:18:56.720 に答える