0

以下のコードで正規表現を使用して見つかったすべての一致を書き出そうとしています:

  var source = "<Content><link><a xlink:href=\"tcm:363-48948\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">Read more</a></link><links xlink:href=\"tcm:362-65596\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"/></Content>";
  var tridionHref = new Regex("tcm:([^\"]*)");
  var elem = XElement.Parse(source);

  XNamespace xlink = "http://www.w3.org/1999/xlink";

  if (tridionHref.IsMatch(elem.ToString()))
  {
      foreach (var Id in elem.Elements().Where(x => x.Attribute(xlink + "href") != null))
      {
          Console.WriteLine(Id.Attribute(xlink + "href").Value); //For testing
          Id.Attribute(xlink + "href").Value = Id.Attribute(xlink + "href").Value.Replace("value1", "value2"); //Just to show you an example 
      }
  }

私のコンソールウィンドウは出力しますが、出力tcm:362-65596しませんtcm:363-48948。コードがタグxlink:href内の値を属性として認識していないように見えますか? <a>誰かが私を正しい方向に向けることができますか? のすべてのインスタンスに一致する必要がありますtcm:([^\"]*)

4

2 に答える 2

1

問題は、適切な場所を見ていないことです。あなたelem.Elementslink要素と要素を見ていlinksます。これらのうちの 1 つだけが、探している属性を持っています。正しい属性を探す前に、より正確にチェックしたい要素を選択する必要があります。

于 2013-05-03T08:43:57.197 に答える
0

私はそれが働いている。Descendantsforループ内で代わりに取得する必要がある正規表現は必要ありませんでした。foreach (var Id in elem.Descendants().Where(x => x.Attribute(xlink + "href") != null))

于 2013-05-03T09:11:47.953 に答える