0

我正在为 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>

我已成功加载此 xml 文件。现在我正在从 xml 文件中访问所有名称为“t”的元素,如下所示。

XNamespace ns = xmlDoc.Root.Name.Namespace;
            var eles = from c in xmlDoc.Descendants(ns + "si")
                       select c.Element(ns + "t");

它也工作正常。但是当我使用以下查询时,它给了我错误

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

它给了我错误,因为对象引用未设置为对象的实例。如何在现有 xml 中将“<@Date> 替换为“hi”。您能否提供我可以解决上述问题的任何代码或链接?

4

2 回答 2

1

您的eles变量已经返回<t>. 没有<t>一个孩子是,所以不返回任何东西<t>是有道理的(因此,这是一个错误)。实际上,我有点困惑,因为应该是一个空序列。x.Element(ns + "t")null.Valueeles.Elements(ns + "t")

此外,C# 术语中的值是<@Date>; &gt;/&lt;仅适用于 xml 。

此外,查询受到<si>没有<t>;的查询的影响。更好的变体是:

var eles = xmlDoc.Descendants(ns + "si").Elements(ns + "t");

(处理 0、1 或多个<t>per <si>

在那之后,你的意思是:

eles.SingleOrDefault(x => x.Value == "<@Date>").Value = "hi";
于 2012-01-03T08:30:47.543 回答
0

您的第一个查询返回名称为“t”的元素,然后您的第二个查询查找这些元素的子元素,名称也为“t”。这与您的文档结构不匹配,您的第二个查询应该是:

var matchingElement = eles.SingleOrDefault(x => x.Value == "&lt;@Date&gt;");

然后,您可以执行替换。

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

于 2012-01-03T08:32:16.787 回答