当我有多个TABLE标记

时间:2016-02-03 09:08:27

标签: c# xml

我正在尝试更改XML文件中的值。应该很容易,除非打字像猴子我无法让它工作。 XML片段如下:

<SENDLABEL LABELACTION="PRINT" NAMEINPRINTER="MLabel1" PRINTERVARIANT="162-12L" FORMAT="LEGACY" PRINTTOFILEPATH="">

<TABLE NAME="PARAMVALUE"><ROWDATA><ROW PARAM="MAXGRAPHICCOMPRESSION" VALUE="0"/><ROW PARAM="BARCODELABELSEQNOLEN" VALUE="0"/><ROW PARAM="LABELROTATION" VALUE="0"/><ROW PARAM="BARCODEGLOBALSEQNOLEN" VALUE="0"/><ROW PARAM="PRINTAMOUNT" VALUE="1"/><ROW PARAM="LABELLOCATION" VALUE="0"/><ROW PARAM="CHARACTERMODE" VALUE="ASCII"/></ROWDATA></TABLE>

<TABLE NAME="PLSAREA"><ROWDATA><ROW PLSETUPNO="11217" PRINTERAREA="0"/></ROWDATA></TABLE>

<TABLE NAME="PLSCHAN"><ROWDATA><ROW PLSETUPNO="11217" PRINTERAREA="0" CHANNELINDEX="0" HORIZONTALDPI="304" VERTICALDPI="304" RASTER="0"/></ROWDATA></TABLE>

<TABLE NAME="PLSETUP"><ROWDATA><ROW LABELHEIGHT="795" LABELWIDTH="580,147"/></ROWDATA></TABLE>

我使用的代码如下。 PRINTERVARIANT将没有问题,但LABELHEIGHT不会。也许是因为XML有很多TABLE,不知何故我需要指定这是一个值为PLSETUP的?如果是这样,我该怎么做呢。

string variant = "108-12L";
string height = "378";
string width = "377,952";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(name);
XmlNode node = xmlDoc.SelectSingleNode("/SENDLABEL");
node.Attributes["PRINTERVARIANT"].Value = variant;

XmlNode node2 = xmlDoc.SelectSingleNode("/SENDLABEL/TABLE/ROWDATA/ROW");
node2.Attributes["LABELHEIGHT"].Value = height;

1 个答案:

答案 0 :(得分:1)

这可以通过多种方式实现,但Linq to xml是我的首选。

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

现在,您可以通过循环浏览项目来更新 LABELHEIGHT 行(如需要说明)

var rows = doc.Descendants("ROW")
              .Where(e=>  e.Attribute("LABELHEIGHT") != null);

最后您可以使用

保存更改
rows.First().Attribute("LABELHEIGHT").Value = ""; // your value

查看demo