XPathとHtmlAgilityPackを使用して属性値を選択する

c# html html-agility-pack xml xpath

質問

html agility packのxpath式を使用してメタタグの2番目の属性値を取得しようとしています。メタタグ:

<meta name="pubdate" content="2012-08-30" />

私は使用しているXMLパスの式:

<meta name="pubdate" content="2012-08-30" />

しかし、何も返さない。私はこのソリューションを検索して実装しようとしました:

<meta name="pubdate" content="2012-08-30" />

別の方法:

<meta name="pubdate" content="2012-08-30" />

しかし、それはHTMLの敏捷性パックでXML例外を提供します。もう一つの解決法もうまくいきませんでした。

<meta name="pubdate" content="2012-08-30" />

理由のために、私はxml path(属性値を得るためにhtml agility pack関数ではなく)を使いたいと思っていました。私が使用する関数は以下の通りです:

<meta name="pubdate" content="2012-08-30" />

今のところ、xmlパス式を使用して属性値を直接取得する方法はないようです。何か案は?

受け入れられた回答

HtmlNodeNavigatorを使用する方法があります:

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

次のコンソールアプリケーションの例は、要素を返すXPathと属性を返すXPathの両方でHtmlNodeNavigator.SelectSingleNode()どのようにHtmlNodeNavigator.SelectSingleNode()するかを示しています。

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

dotnetfiddleデモ

出力:

public static string TextfromOneNode(HtmlNode node, string xmlPath)
{
    string toReturn = "";
    var navigator = (HtmlAgilityPack.HtmlNodeNavigator)node.CreateNavigator();
    var result = navigator.SelectSingleNode(xmlPath);
    if(result != null)
    {
        toReturn = result.Value;
    }
    return toReturn;
}

人気のある回答

xml linqの使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "<meta name=\"pubdate\" content=\"2012-08-30\" />";
            XElement meta = XElement.Parse(input);
            DateTime output = (DateTime)meta.Attribute("content");
        }
    }
}



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ