加载XML文件添加值并保存

时间:2018-03-20 16:00:37

标签: c# xml

我有一个XML文件,我们在AS400中使用systemlink。我有工作的XML文件,如果我只是在按钮上执行加载文档,则单击它会向数据库写入硬编码值。但是,我想修改文本框中的值。这是我的XML:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE System-Link SYSTEM 'SystemLinkRequest.dtd'>
      <System-Link>
<Login userId='' password='' maxIdle='900000'
   properties='com.pjx.cas.domain.EnvironmentId=RN,
           com.pjx.cas.domain.SystemName=,
           com.pjx.cas.user.LanguageId=en'/>

<Request sessionHandle='*current' workHandle='*new'
   broker='EJB' maxIdle='1000'>

<Create name='newObject_ITItemLocation_Default' domainClass='EXT0149' retainResult='false'>
  <ApplyTemplate clientClass='EXT0149'>
    <![CDATA[Asset]]>
  </ApplyTemplate>
  <DomainEntity>
    <Property path='ponum'>
      <Value><![CDATA[P21851]]></Value>
    </Property>
    <Property path='itmnbr'>
      <Value><![CDATA[909520]]></Value>
    </Property>
    <Property path='itmcls'>
      <Value><![CDATA[1]]></Value>
    </Property>
    <Property path='itmloc'>
      <Value><![CDATA[1]]></Value>
    </Property>
    <Property path='srnum'>
      <Value><![CDATA[]]></Value>
    </Property>
  </DomainEntity>
</Create>

这是我的C#:

enterXmlDocument document = new XmlDocument();
document.Load(Server.MapPath("~/addNew.xml"));
XmlElement po = document.GetElementById("ponum");
po.Value = poTextBox.Text;
document.Save(Server.MapPath("~/addNew.xml")); 

每当我尝试运行它时,我得到一个未找到的对象,所以我猜它找不到ponum字段。我想将poTextBox.Text修补到当前P21851的位置。像我说的任何建议,如果我只是做文档。按下按钮点击它写入数据库就好了,我只想修改我的值。

2 个答案:

答案 0 :(得分:0)

为什么不使用序列化将xml转换为对象,这样你就能做你想做的事情?你有xsd吗?

答案 1 :(得分:0)

决定采用不同的方法并将其放入一个字符串并执行HttpWebRequest,以便我可以将我的值修补到我的字符串中。谢谢你的答案,有一天我会搞砸如何在XML文档中完成这项工作。

string asset = "<?xml version='1.0' encoding='UTF-8'?>" + "<!DOCTYPE System-Link SYSTEM 'SystemLinkRequest.dtd'>" + "<System-Link>" + "<Login userId='' password='' maxIdle='900000' properties='com.pjx.cas.domain.EnvironmentId=RN, com.pjx.cas.domain.SystemName=,com.pjx.cas.user.LanguageId=en'/>" + "<Request sessionHandle='*current' workHandle='*new' broker='EJB' maxIdle='1000'>" + "<Create name='newObject_ITItemLocation_Default' domainClass='EXT0149' retainResult='false'>" + "<ApplyTemplate clientClass='EXT0149'>" + "<![CDATA[Asset]]>" + "</ApplyTemplate>" + "<DomainEntity>" + "<Property path='ponum'><Value><![CDATA[" + poTextBox.Text + "]]></Value></Property>" + "<Property path='itmnbr'><Value><![CDATA[" + itemNoTextBox.Text + "]]></Value></Property>" + "<Property path='itmcls'><Value><![CDATA[" + classDropDown.SelectedValue +"]]></Value></Property>" + "<Property path='itmloc'><Value><![CDATA[" + locationDropDown.SelectedValue + "]]></Value></Property>" + "<Property path='srnum'><Value><![CDATA["+ serialTextBox.Text +"]]></Value></Property>" + "</DomainEntity>" + "</Create>" + "</Request>" + "</System-Link>";

String wRequestString = "SystemLinkRequest=" + HttpUtility.UrlEncode(asset);