Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在linq中使用名称空间设置元素值?_C#_Silverlight_Linq To Xml_Xnamespace - Fatal编程技术网

C# 如何在linq中使用名称空间设置元素值?

C# 如何在linq中使用名称空间设置元素值?,c#,silverlight,linq-to-xml,xnamespace,C#,Silverlight,Linq To Xml,Xnamespace,我正在为sharepoint 2010开发silverlight web部件。我的应用程序中有一个xml文件,如下所示 <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="67" uniqueCount="39"> <si> <t>INVOICE</t> </si> <si> <t>

我正在为sharepoint 2010开发silverlight web部件。我的应用程序中有一个xml文件,如下所示

<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="67" uniqueCount="39">
  <si>
    <t>INVOICE</t>
  </si>
  <si>
    <t>INVOICE #</t>
  </si>
  <si>
    <t>Bill To:</t>
  </si>
  <si>
    < t>DESCRIPTION</t>
  </si>
  <si>
    <t>AMOUNT</t>
  </si>
  <si>
    <t>TOTAL</t>
  </si>
  <si>
    <t>FOR:</t>
  </si>
  <si>
    <t>Positive Behavior Support Corp</t>
  </si>
  <si>
    <t>8108 SE Coconut St.</t>
  </si>
  <si>
    <t>Hobe Sound, FL 33455</t>
  </si>
  <si>
    <t>772-349-6317 Phone  772-675-9100 Fax</t>
  </si>
  <si>
    <t>EIN 20-5268843</t>
  </si>
  <si>
    <t>Provider 693068996</t>
  </si>
  <si>
    <t>Rate</t>
  </si>
  <si>
    <t>Units</t>
  </si>
  <si>
    <t>DATE</t>
  </si>
  <si>
    <t>Michael Nolan Ph.D. BCBA</t>
  </si>
  <si>
    <t>____________________________________________</t>
  </si>
  <si>
    <t>BCBA                          Date</t>
  </si>
  <si>
    <t>CLIENT:</t>
  </si>
  <si>
    <t>Date:</t>
  </si>
  <si>
    <t>Behavior Assistant- L. Bresson</t>
  </si>
  <si>
    <t>Email:</t>
  </si>
  <si>
    <t>1 Unit = 1 hour</t>
  </si>
  <si>
    <t>TOTALS</t>
  </si>
  <si>
    <t>cvt1970@juno.com</t>
  </si>
  <si>
    <t>Attn: Cecilia</t>
  </si>
  <si>
    <t>Behavior Assistant- B. Bresson</t>
  </si>
  <si>
    <t>Behaviror Ass't -N Giarratano</t>
  </si>
  <si>
    <t>Signature of Representatives Approval           Date</t>
  </si>
  <si>
    <r>
      <t xml:space="preserve">Behavior Asst- </t>
    </r>
    <r>
      <rPr>
        <sz val="9" />
        <rFont val="Arial" />
        <family val="2" />
      </rPr>
      <t>N Giarratano-</t>
    </r>
    <r>
      <rPr>
        <sz val="10" />
        <rFont val="Arial" />
        <family val="2" />
      </rPr>
      <t>08</t>
    </r>
  </si>
  <si>
    <t>Behavior Asst- B. Bresson-08</t>
  </si>
  <si>
    <t>Behavior Asst- L. Bresson-08</t>
  </si>
  <si>
    <t>&lt;@Invoice&gt;</t>
  </si>
  <si>
    <t>&lt;@For&gt;</t>
  </si>
  <si>
    <t>&lt;@Client&gt;</t>
  </si>
  <si>
    <t>&lt;@Caregiver&gt;</t>
  </si>
  <si>
    <t>&lt;@Email,@Address,@City,@State,@Zip&gt;</t>
  </si>
  <si>
    <t>&lt;@Date&gt;</t>
  </si>
</sst>
它也工作得很好。 但是当我使用下面的查询时,它给了我错误

eles.Elements(ns + "t").Where(x => x.Element(ns + "t").Value == "&lt;@Date&gt;").SingleOrDefault().SetElementValue(ns + "t","hi");

它给了我一个错误,因为对象引用并没有设置为对象的实例。如何将现有xml中的“hi”替换为“hi”。您能提供任何代码或链接来解决上述问题吗?

您的
eles
变量已返回
。没有一个
的子元素是
,因此
x.Element(ns+“t”)是有意义的
不返回任何内容(因此
null
,因此
Value
是一个错误)。实际上,我有点困惑,因为
eles.Elements(ns+“t”)
应该是一个空序列

另外,C术语中的值是
/
仅适用于xml

此外,查询正受到没有
的查询的影响;更好的变体是:

var eles = xmlDoc.Descendants(ns + "si").Elements(ns + "t");
(每个
处理0、1或多个

然后,你的意思是:

eles.SingleOrDefault(x => x.Value == "<@Date>").Value = "hi";
eles.SingleOrDefault(x=>x.Value==”).Value=“hi”;

第一个查询返回名为“t”的元素,第二个查询则查找这些元素的子元素,同时查找名为“t”的元素。这与文档的结构不匹配,第二个查询应为:

var matchingElement = eles.SingleOrDefault(x => x.Value == "&lt;@Date&gt;");
然后,您可以执行替换


我建议在开发代码时使用调试器。如果使用断点然后检查
eles
变量,您可以实际看到第一次查询返回的内容。

我在[30]位置的结果视图中得到null。这可能是不工作的原因吗?如果是原因,那么我应该如何编写查询?它不工作。我正在查询eles.SingleOrDefault(x=>x.value==“”)中的x中获取空值。value=“嗨"; 它仍然给出错误“对象引用未设置为对象的实例。我在位置[30]处的“eles”结果集中得到空值。”。这可能是不工作的原因吗?如果这是原因,那么我应该如何编写查询[下面的注释副本]您看到我关于调试的注释了吗?设置断点并检查第一次查询返回的元素列表。寻找一个与你需要的价值。自己解决一点问题吧@ShaileshJaiswal你看到我写的修改后的
eles
查询了吗?问题是,正如我所写的,您的一个
缺少
,这意味着
c.Element(ns+“t”)
为该记录返回
null
。我用一个不同的
eles
查询删除了上面的问题。它不起作用。我在查询var matchingElement=eles.SingleOrDefault(x=>x.value==“@Date”)中得到x中的空值;它仍然给出错误“对象引用未设置为对象的实例。我在位置[30]处的“eles”结果集中得到空值。”。这可能是不工作的原因吗?如果这是原因,那么我应该如何编写查询您看到我对调试的评论了吗?设置断点并检查第一次查询返回的元素列表。寻找一个与你需要的价值。自己解决一点问题吧!我已经设置了断点并看到了“eles”的结果。因为在位置[30]处存在空值。这里有system.xml.linq.XElemnet[0]是“空序列”,在位置[38]有一个我需要的值。请注意,该值不是
@Date
-它是
@ShaileshJaiswal,我已经用该
null
解释了整个问题,并将修复发布到您的
eles
查询中。。。
var matchingElement = eles.SingleOrDefault(x => x.Value == "&lt;@Date&gt;");