首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从所选节点中选择返回数据所有xml

从所选节点中选择返回数据所有xml
EN

Stack Overflow用户
提问于 2018-09-30 05:23:02
回答 2查看 69关注 0票数 0

存在具有设置的XML

<?xml version="1.0" encoding="utf-8" ?>
    <TablesConfig>  
      <Logs>
        <Table name="T_1" key="id">
          <FieldsSearch>
            <Field>All</Field>        
          </FieldsSearch>
          <LinksDetail>
            <Link table="t_Det11" key ="id" srcKey="id_request" sortField ="id"/>
            <Link table="t_Det12" key ="id" srcKey="id_request" sortField ="id"/>
            <Link table="t_Det13" key ="id" srcKey="id_request" sortField ="id"/>      
          </LinksDetail>
        </Table>
        <Table name="T_2" key="id">
          <FieldsSearch>
            <Field>All</Field>        
          </FieldsSearch>

          <LinksDetail>
            <Link table="t_Det21"  key ="id" srcKey="operid" sortField ="id"/>
            <Link table="t_Det22" key ="id" srcKey="operid" sortField ="id"/>      
          <Link table="t_Det22"   key ="id" srcKey="operid" sortField ="id"/>
          </LinksDetail>
        </Table>
  </Logs>
</TablesConfig>

在我的TableSettings代码中,我选择了一个节点,在getFiltersList中,我希望从字段选择的节点中获取列表,但是node.SelectNodes(“// FieldsSearch /FieldsSearch”)返回2行。为什么?我可以选择一个节点并使用它吗?

Class TableSettings{
    XmlNode node;
    public TableSettings(string TableName) {
                doc = new XmlDocument();
                tabSettingsPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\ExtFiles\\TablesConf.xml";
                doc.Load(tabSettingsPath);
                node = doc.SelectSingleNode("//Table[@name='"+TableName+"']"); 
            }
            public List<string> getFiltersList() {
                List<string> filtersList = new List<string>();
                foreach (XmlNode inNode in node.SelectNodes("//FieldsSearch/Field")) {
                    filtersList.Add(inNode.FirstChild.Value);
                }
                return filtersList;
            }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 02:32:43

路径//从根目录开始。要使用当前节点,需要使用.// -从当前节点".//FieldsSearch/Field“开始或仅使用"FieldsSearch / Field”

public List<string> getFiltersList()
{
    List<string> filtersList = new List<string>();
    foreach (XmlNode inNode in node.SelectNodes(".//FieldsSearch/Field"))
    {
        filtersList.Add(inNode.FirstChild.Value);
    }
    return filtersList;
}
票数 0
EN

Stack Overflow用户

发布于 2018-09-30 05:39:51

您检查的不是所选节点的子节点,而是根节点的所有子代节点。您可以将其更正为:

public List<string> getFiltersList(XmlNode node)
{
    List<string> filtersList = new List<string>();
    foreach (XmlNode inNode in node.SelectNodes("FieldsSearch/Field"))
    {
        filtersList.Add(inNode.FirstChild.Value);
    }
    return filtersList;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52572666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档