我具有以下XML,并且我试图获取等于974的“ MarcEntryInfo”元素值,没有人知道如何使用XDocument来表示它。
在我的C#代码中,我尝试获取该值,但似乎无法检索该值。
表达我的疑问的另一种方法是,MarcEntryInfo的子标记是否具有某个值的entryID,返回特定MarcEntryInfo的文本子元素的字符串值。
谢谢
<LookupTitleInfoResponse xmlns="http://schemas.sirsidynix.com/symws/standard">
<TitleInfo>
<titleID>4971729</titleID>
<CallInfo>
<libraryID>PRODUCT</libraryID>
<classificationID>ALPHANUM</classificationID>
<callNumber>WS6689</callNumber>
<numberOfCopies>1</numberOfCopies>
<ItemInfo>
<itemID>4971729-1001</itemID>
<itemTypeID>TAPE</itemTypeID>
<currentLocationID>STORE</currentLocationID>
<homeLocationID>STORE</homeLocationID>
<chargeable>true</chargeable>
<fixedTimeBooking>false</fixedTimeBooking>
</ItemInfo>
</CallInfo>
<BibliographicInfo>
<MarcEntryInfo>
<label>MD-ARK</label>
<entryID>974</entryID>
<indicators></indicators>
<text>ark:/81055/vdc_100000006155.0x2afcee</text>
<entryTypeCodes>L</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>L-ARK: INGESTED</label>
<entryID>975</entryID>
<indicators></indicators>
<text>ark:/81055/vdc_100055625567.0x000002</text>
<entryTypeCodes>L</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>SHELFMARK</label>
<entryID>087</entryID>
<indicators></indicators>
<text>WS6689</text>
<entryTypeCodes>VR</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Unpublished series</label>
<entryID>441</entryID>
<indicators></indicators>
<text>Wildlife species reels</text>
<entryTypeCodes>MTR</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Other ref. no.</label>
<entryID>091</entryID>
<indicators></indicators>
<text>W Melanogrammus aeglefinus r1</text>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Product title</label>
<entryID>499</entryID>
<indicators></indicators>
<text>Melanogrammus aeglefinus r1</text>
<entryTypeCodes>MAR</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Format</label>
<entryID>310</entryID>
<indicators></indicators>
<text>1 tape reel</text>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Cataloguing status</label>
<entryID>971</entryID>
<indicators></indicators>
<text>prc</text>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Data source</label>
<entryID>976</entryID>
<indicators></indicators>
<text>WSF</text>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Content code</label>
<entryID>312</entryID>
<indicators></indicators>
<text>a</text>
<entryTypeCodes>L</entryTypeCodes>
</MarcEntryInfo>
</BibliographicInfo>
</TitleInfo>
</LookupTitleInfoResponse>
答案 0 :(得分:0)
为了简洁起见,我将XML截断了。注意事项:
entryID
元素,然后导航到其父元素下面的示例代码。拥有entryInfo
元素后,您可以从其所需的子元素中提取任何信息。
void Main()
{
var xml = @"<LookupTitleInfoResponse xmlns=""http://schemas.sirsidynix.com/symws/standard"">
<TitleInfo>
<titleID>4971729</titleID>
<CallInfo>
<libraryID>PRODUCT</libraryID>
<classificationID>ALPHANUM</classificationID>
<callNumber>WS6689</callNumber>
<numberOfCopies>1</numberOfCopies>
<ItemInfo>
<itemID>4971729-1001</itemID>
<itemTypeID>TAPE</itemTypeID>
<currentLocationID>STORE</currentLocationID>
<homeLocationID>STORE</homeLocationID>
<chargeable>true</chargeable>
<fixedTimeBooking>false</fixedTimeBooking>
</ItemInfo>
</CallInfo>
<BibliographicInfo>
<MarcEntryInfo>
<label>MD-ARK</label>
<entryID>974</entryID>
<indicators></indicators>
<text>ark:/81055/vdc_100000006155.0x2afcee</text>
<entryTypeCodes>L</entryTypeCodes>
</MarcEntryInfo>
<MarcEntryInfo>
<label>Content code</label>
<entryID>312</entryID>
<indicators></indicators>
<text>a</text>
<entryTypeCodes>L</entryTypeCodes>
</MarcEntryInfo>
</BibliographicInfo>
</TitleInfo>
</LookupTitleInfoResponse>";
var nsManager = new XmlNamespaceManager(new NameTable());
nsManager.AddNamespace("ns", "http://schemas.sirsidynix.com/symws/standard");
var doc = XDocument.Parse(xml);
var entryInfo = doc.XPathSelectElement("//ns:entryID[contains(text(), '974')]/..", nsManager);
Console.WriteLine(entryInfo);
// Output:
// <MarcEntryInfo xmlns="http://schemas.sirsidynix.com/symws/standard">
// <label>MD-ARK</label>
// <entryID>974</entryID>
// <indicators></indicators>
// <text>ark:/81055/vdc_100000006155.0x2afcee</text>
// <entryTypeCodes>L</entryTypeCodes>
// </MarcEntryInfo>
}
答案 1 :(得分:0)
我认为您可以在此处使用Linq到XML
下面的代码将使您获得XML上的所有条目ID标记
如果需要特定值,可以添加.SingleOrDefault(el => el.Value ==“ 974”);
[TestMethod]
public void GetLongestCommonPrefixTest()
{
var str1 = @"C:\dir\dir1\file1";
var str2 = @"C:\dir\dir1\file2";
var str3 = @"C:\dir\dir1\file3";
var str4 = @"C:\dir\dir2\file3";
var str5 = @"C:\dir\dir1\file1\file3";
var str6 = @"C:\dir\dir1\file1\file3";
var res = Utilities.GetLongestCommonPrefix(str1, str2, str3);
Assert.AreEqual(@"C:\dir\dir1", res);
var res2 = Utilities.GetLongestCommonPrefix(str1, str2, str3, str4);
Assert.AreEqual(@"C:\dir", res2);
var res3 = Utilities.GetLongestCommonPrefix(str1, str2, str3, str5);
Assert.AreEqual(@"C:\dir\dir1", res3);
var res4 = Utilities.GetLongestCommonPrefix(str5, str6);
Assert.AreEqual(@"C:\dir\dir1\file1\file3", res4);
var res5 = Utilities.GetLongestCommonPrefix(str5);
Assert.AreEqual(str5, res5);
var res6 = Utilities.GetLongestCommonPrefix();
Assert.AreEqual(null, res6);
var res7 = Utilities.GetLongestCommonPrefix(null);
Assert.AreEqual(null, res7);
}