0

次の XML が与えられた場合

 <?xml version="1.0" encoding="utf-8" ?>
 <headtags>
  <tags page-path-from-root="Models/ModelDashboard">
    <tag type="title" value=""></tag>
    <tag type="meta" name="keyword" content=""></tag>
    <tag type="meta" name="description" content=""></tag>
    <tag type="meta" name="author" content=""></tag>
    <tag type="link" rel="canonical" href="" />
    <tag type="meta" property="og:locale" content="en_US" />
     <tag type="meta" property="og:type" content="website" />
    <tag type="meta" property="og:title" content="Model Dashboard" />
    <tag type="meta" property="og:description" content="Dashboard of values for a {model}" />
    <tag type="meta" property="og:site_name" content="Car Collector Data" />
    <tag type="meta" property="article:publisher" content="Group LLC" />
    <tag type="meta" property="article:author" content="me" />       
 </tags>
 <tags page-path-from-root="Identity/Account/Manage/SiteStatus">
   <tag type="title" value=""></tag>
   <tag type="meta" name="keyword" content=""></tag>
   <tag type="meta" name="description" content=""></tag>
   <tag type="meta" name="author" content=""></tag>
   <tag type="link" rel="canonical" href="" />
   <tag type="meta" property="og:locale" content="en_US" />
   <tag type="meta" property="og:type" content="" />
   <tag type="meta" property="og:title" content="" />
   <tag type="meta" property="og:description" content="" />
   <tag type="meta" property="og:url" content="" />
   <tag type="meta" property="og:site_name" content="" />
   <tag type="meta" property="article:publisher" content="" />
   <tag type="meta" property="article:author" content="" />   
 </tags>
</headtags>

次のメソッドは、プロパティ値に「og:」が含まれている要素を見つける際に常にエラーが発生する最後の行までずっと機能します。これは明らかに 6 つあります。コロンをエスケープする必要がありますか? 私はそう思ったが、それを削除すると、その行はまだContains("og")で失敗します

public List<XElement> GetOpenGraphTagsForPage(string page)
{
   var doc = XDocument.Load(_metaTagXmlFile);
       
  var metaTags =  doc.Descendants("headtags")
                    .Elements("tags")
                  //page value is modeldashboard
                   .Where(u => u.Attribute("page-path-from-root").Value.ToLower().Contains(page))
                  .Elements("tag") //[@type='meta'] didn't work in Xname to eliminate next line...why?
                 .Where(u => u.Attribute("type")?.Value == "meta")
                 .Where(u => u.Attribute("property").Value.Contains("og:"))
                .ToList();

        return metaTags;
    }

さらに、なぜこれができないのですか(エラーは「[」文字は許可されていません)

.Elements("tag[@type='meta']") 

これと同じ結果を生成します

 .Elements("tag") //[@type='meta'] didn't work in Xname to eliminate next line...why?
 .Where(u => u.Attribute("type")?.Value == "meta")

最初のもののXpathは同じことを求めています

4

1 に答える 1