首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XElement.Descendant似乎没有获得正确的元素

XElement.Descendant似乎没有获得正确的元素
EN

Stack Overflow用户
提问于 2014-07-21 23:55:33
回答 2查看 58关注 0票数 0

我没有从下面的代码中得到我期望的结果。我有很多"VectorScaleRange“的元素。我希望获得所有这些元素,并且对于每个元素,我希望获得名为"MaxScale“和"MinScale”的嵌套元素。问题是,在每个循环中,我为xElmVectorScaleRange获得值"151“,为xElmMinScale和xElmMaxScale获得空元素

你知道出什么问题了吗?

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            StringBuilder strXml= new StringBuilder();

            strXml.AppendLine("<?xml version='1.0'?>");
            strXml.AppendLine("<LayerDefinition xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' version='1.3.0' xsi:noNamespaceSchemaLocation='LayerDefinition-1.3.0.xsd'>");
            strXml.AppendLine("  <VectorLayerDefinition>");
            strXml.AppendLine("    <VectorScaleRange>");
            strXml.AppendLine("      <MaxScale>151</MaxScale>");
            strXml.AppendLine("      <MinScale>0</MinScale>");
            strXml.AppendLine("    </VectorScaleRange>");
            strXml.AppendLine("    <VectorScaleRange>");
            strXml.AppendLine("      <MaxScale>222</MaxScale>");
            strXml.AppendLine("      <MinScale>0</MinScale>");
            strXml.AppendLine("    </VectorScaleRange>");
            strXml.AppendLine("  </VectorLayerDefinition>");
            strXml.AppendLine("</LayerDefinition>");

            XDocument xDoc = XDocument.Parse(strXml.ToString());                

            //get all vector scale ranges  
            foreach (XElement xElmVectorScaleRange in xDoc.Descendants("VectorScaleRange").Elements())
            {
                //check for scale
                XElement xElmMinScale = xElmVectorScaleRange.Descendants("MinScale").FirstOrDefault();
                XElement xElmMaxScale = xElmVectorScaleRange.Descendants("MaxScale").FirstOrDefault();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2014-07-22 00:05:10

改变这一点

代码语言:javascript
复制
foreach (XElement xElmVectorScaleRange in xDoc.Descendants("VectorScaleRange").Elements())

代码语言:javascript
复制
foreach (XElement xElmVectorScaleRange in xDoc.Descendants("VectorScaleRange"))

Descendants方法已经为您提供了所需的元素,但是您调用的是Descendants().Elements(),这将导致在VectorScaleRange中返回元素。而且这里没有其他级别的嵌套,所以很明显,当你调用xElmVectorScaleRange.Descendants("MinScale")时,你会得到null

票数 2
EN

Stack Overflow用户

发布于 2014-07-22 00:05:46

代码语言:javascript
复制
...in xDoc.Descendants("VectorScaleRange").Elements())

当您似乎想遍历VectorScaleRange本身时,您正在遍历VectorScaleRanges中的elements (即,xElmVectorScaleRange是每个MinMaxScale)。然后,您的代码查找具有正确名称的这些元素的后代,但找不到(全部为null)。

而且看起来最多只能有一个MinMaxScale的后代,而且始终是直系后代,所以ElementDescendants更有意义。

代码语言:javascript
复制
foreach (XElement xElmVectorScaleRange in xDoc.Descendants("VectorScaleRange"))
{
    //check for scale
    XElement xElmMinScale = xElmVectorScaleRange.Element("MinScale");
    XElement xElmMaxScale = xElmVectorScaleRange.Element("MaxScale");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24869387

复制
相关文章

相似问题

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