Select 来自所选节点 return 数据全部 xml
Select from selected node return data all xml
有 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 代码中,我 select 一个节点,在 getFiltersList 中,我想从 FieldsSearch selected 节点获取列表,但是 node.SelectNodes("//FieldsSearch/Field" ) return 2 行。为什么?
我可以 select 一个节点并使用它吗?
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;
}
}
您不是在检查所选节点的子节点,而是在检查根节点的所有后代节点。您可以更正为:
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;
}
路径 // 从根开始。
对于 Work with currentnode 需要使用 .// - 从当前节点“.//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;
}
有 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 代码中,我 select 一个节点,在 getFiltersList 中,我想从 FieldsSearch selected 节点获取列表,但是 node.SelectNodes("//FieldsSearch/Field" ) return 2 行。为什么? 我可以 select 一个节点并使用它吗?
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;
}
}
您不是在检查所选节点的子节点,而是在检查根节点的所有后代节点。您可以更正为:
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;
}
路径 // 从根开始。 对于 Work with currentnode 需要使用 .// - 从当前节点“.//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;
}