我想添加两个过滤条件,我能够实现一个结果。如果我正在使用标签进行搜索(这里我被卡住了),我想获得结果。在c中使用相同的标签名称过滤条件相同的标签名称#
XML文件
<root>
<DescriptorRecord DescriptorClass = "1">
<DescriptorName>
<String>abc</String>
</DescriptorName>
<ConceptList>
<Concept PreferredConceptYN="Y">
<TermList>
<Term ConceptPreferredTermYN="Y" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="Y" RecordPreferredTermYN="Y">
<String>abc</String>
</Term>
<Term ConceptPreferredTermYN="N" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="N" RecordPreferredTermYN="N">
<String>pqr</String>
</Term>
<Term ConceptPreferredTermYN="N" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="Y" RecordPreferredTermYN="N">
<String>xyz</String>
</Term>
</TermList>
</Concept>
</ConceptList>
</DescriptorRecord>
<DescriptorRecord DescriptorClass = "1">
<DescriptorName>
<String>123</String>
</DescriptorName>
<ConceptList>
<Concept PreferredConceptYN="Y">
<TermList>
<Term ConceptPreferredTermYN="Y" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="Y" RecordPreferredTermYN="Y">
<String>123</String>
</Term>
<Term ConceptPreferredTermYN="N" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="N" RecordPreferredTermYN="N">
<String>456</String>
</Term>
<Term ConceptPreferredTermYN="N" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="Y" RecordPreferredTermYN="N">
<String>789</String>
</Term>
</TermList>
</Concept>
</ConceptList>
</DescriptorRecord>
</root>
C#代码
XmlDocument doc = new XmlDocument();
doc.Load(myXMLfile);
XmlNodeList descriptors = doc.SelectNodes("root/DescriptorRecord");
#region
foreach (XmlNode desc in descriptors)
{
if (desc != null && desc.HasChildNodes)
{
var node = desc.SelectSingleNode("DescriptorName/String");
if (node != null)
{
String descName = node.InnerText.ToLower().Replace(SPACE, string.Empty);
if (string.Equals(descName, lowerCaseGeneralTerm))
{
//Read a collection of nodes if your file have many <Term> nodes
XmlNodeList xmlNodeList = desc.SelectNodes("ConceptList/Concept/TermList/Term/String");
if (xmlNodeList != null)
{
foreach (XmlNode xmlNode in xmlNodeList)
{
conceptNames.Add(xmlNode.InnerText);
}
var result = conceptNames.Where(x => x.Replace(SPACE, string.Empty).Equals(lowerCaseGeneralTerm, StringComparison.InvariantCultureIgnoreCase));
if (result != null && result.Count() > 0)
{
//Seprate concepts with new line
String splitConceptWithComma = String.Join(Environment.NewLine, conceptNames.ToArray());
txtMeSHTerms.Text = splitConceptWithComma;
}
}
}
}
}
//Clear the list after displaying result so for next search it won't combine previous + current result.
conceptNames.Clear();
}
结果:
如果从<DescriptorName>
标签搜索 “ABC”
<DescriptorName>
<String>abc</String>
</DescriptorName>
我得到以下RESU LT。
ABC PQR XYZ
满足我一个条件。
第二个条件是,如果您从<Term>
标签搜索,那么它应该返回相同的结果。
<Term ConceptPreferredTermYN="Y" IsPermutedTermYN="N" LexicalTag="NON" PrintFlagYN="Y" RecordPreferredTermYN="Y">
<String>abc</String>
</Term>
我希望这些信息足够。提前致谢。