8

これは基本的なことであり、おそらく以前に尋ねられたと思いますが、私はLinqtoXMLの使用を開始したばかりです。

読み取りと書き込みが必要な単純なXMLがあります。

<Documents>
...
    <Document>
      <GUID>09a1f55f-c248-44cd-9460-c0aab7c017c9-0</GUID>
      <ArchiveTime>2012-05-15T14:27:58.5270023+02:00</ArchiveTime>
      <ArchiveTimeUtc>2012-05-15T12:27:58.5270023Z</ArchiveTimeUtc>
      <IndexDatas>
        <IndexData>
          <Name>Name1</Name>
          <Value>Some value</Value>
          <DataType>1</DataType>
          <CreationTime>2012-05-15T14:27:39.6427753+02:00</CreationTime>
          <CreationTimeUtc>2012-05-15T12:27:39.6427753Z</CreationTimeUtc>
        </IndexData>
        <IndexData>
          <Name>Name2</Name>
          <Value>Some value</Value>
          <DataType>3</DataType>
          <CreationTime>2012-05-15T14:27:39.6427753+02:00</CreationTime>
          <CreationTimeUtc>2012-05-15T12:27:39.6427753Z</CreationTimeUtc>
        </IndexData>
   ...
 </IndexDatas>
</Document>
...
</Documents>

たくさんの「ドキュメント」ノードを含む「ドキュメント」ノードがあります。

ドキュメントのGUIDと「IndexData」名があります。GUIDでドキュメントを検索し、何らかの名前の「IndexData」が含まれているかどうかを確認する必要があります。それがない場合は、追加する必要があります。

私はトラフ要素の読み取りと検索に問題があるので、どんな助けでも感謝されるでしょう。

現在、私は(C#で)使用しようとしています:

IEnumerable<XElement> xmlDocuments = from c in XElement
                                        .Load(filePath)
                                        .Elements("Documents") 
                                         select c;

// fetch document
 XElement documentElementToEdit = (from c in xmlDocuments where 
                    (string)c.Element("GUID").Value == GUID select c).Single();

編集

xmlDocuments.Element("Documents").Elements("Document")

これは、xmlDocuments.Element( "Documents")が返す場合でも、結果を返しません。ドキュメントノードからドキュメントノードを取得できないようです。

4

2 に答える 2

9

これらのドキュメント(インデックスデータに関連する名前がないドキュメント)は、以下のコードで見つけることができます。その後、IndexData要素の最後に要素を追加できます。

var relatedDocs = doc.Elements("Document")
   .Where(x=>x.Element("GUID").Value == givenValue)
   .Where(x=>!x.Element("IndexDatas")
              .Elements("IndexData")
              .Any(x=>x.Element("Name") == someValue);
于 2012-07-06T06:34:55.960 に答える
0

これは機能するはずです:

var x = XDocument.Load(filePath);
// guid in your sample xml is not a valid guid, so I changed it to a random valid one
var requiredGuid = new Guid("E61D174C-9048-438D-A532-17311F57ED9B");
var requiredName = "Name1";

var doc = x.Root
           .Elements("Document")
           .Where(d => (Guid)d.Element("GUID") == requiredGuid)
           .FirstOrDefault();
if(doc != null)
{
    var data = doc.Element("IndexDatas")
                  .Elements("IndexData")
                  .Where(d => (string)d.Element("Name") == requiredName)
                  .FirstOrDefault();
    if(data != null)
    {
        // index data found
    }
    else
    {
        // index data not found
    }
}
else
{
    // document not found
}
于 2012-07-06T06:35:21.763 に答える