当我有多个 TABLE 标签时更改 XML 节点值

本文关键字:XML 节点 标签 TABLE | 更新日期: 2023-09-27 18:32:56

我正在尝试更改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>

我使用的代码如下。打印机变体不会改变任何问题,但标签高度不会改变。也许是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;

当我有多个 TABLE 标签时更改 XML 节点值

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

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

现在,您可以通过循环访问项目来更新带有标签高度的行(根据需要所述)

rows.First().Attribute("LABELHEIGHT").Value = ""; // your value

最后,您可以使用以下方法保存更改

 doc.Save(); Save your changes.

看演示