如何提取两个xml文件的部分属性值spring xml 赋值值到生成的第三个xml文件中 急求!!谢谢 大佬

紫金桥软件读写XML文件-专业自动化论坛-中国工控网
紫金桥软件读写XML文件
给TA发消息
加TA为好友
发表于: 10:16:48
关键词:紫金桥软件,自动控制,obXml组件&一、概述XML又名“可扩展标记语言”,它提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。这种统一性使得不同的软件之间拥有一座通讯桥梁。XML广泛应用于自动控制领域,因此在使用不同编程语言、组态工具时经常需要解析XML格式文件。本文讲述如何使用紫金桥软件来读取XML文件。二、ObXml组件简介在紫金桥软件中,使用ObXml组件可以方便的读写XML文件。ObXml组件用于解析或生成XML文件。使用Load函数载入XML文件或直接创建XML文件后,所有关于文件的修改操作都是针对内存数据的修改,在使用Save函数或SaveAs函数之后才会将修改的结果保存至硬盘。每个XML结点以及结点属性均对应一个整型标识号,标识号是在组件读取XML(新建XML)后动态生成的,作为执行组件各种操作函数的参数以定位结点或结点属性。因为标识号是动态生成的,并非XML文件自带信息,每次使用组件打开(或新建)XML文件时同一结点的标识号可能会不同,因此它只能在运行时临时获取并使用,当组件关闭后,这些标识将失去意义。 &&&&组件实现的功能:&&&&1)读取已存在的XML文件,遍历所有结点,读写结点名字、结点文本、结点属性,读写声明语句。&&&&2)创建新的XML文件并保存。&&&&注意事项:&&&&1)无法读取或写入XML文件中的注释语句。2)能够识别UTF-8、GBK、ANSI编码格式。无法识别Unicode、Unicode big endian编码格式。三、工程示例制作一个可以读取XML文件的工程,主画面包含两部分:左侧为一个树形控件,用于显示所有XML结点;右侧为一个结点属性窗口,当点击树形控件上的不同结点时,属性窗口显示对应结点的所有信息:结点名、结点文本、结点标识、结点路径、属性列表,其中属性列表包含每个属性的属性名、属性文本、属性标识。效果图如下:1、引入组件如果在子图中已存在该组件,可以忽略此步骤,直接进入下一步。在组态界面打开子图选择画面,在左侧选择“windows控件”一项,如下图所示:点击右上方菜单“文件-&安装子图库”,如下图所示:在弹出的文件选择对话框中找到紫金桥安装目录下的Wizard文件夹,并选择“ObXml.dll”文件,然后点击“打开”按钮。然后在弹出的画面中输入名字“XML”,然后点击“确定”按钮,如下图:这样,XML组件就可以使用了。2、前期准备创建一个窗口,命名为“win_main”。创建内部对象:创建一个XML组件,命名为“w_xml”。创建一个按钮,文本改成“读取”。创建一个文本框,命名为“w_editFileName”。创建一个树形控件,命名为“w_tree”。完成后的画面:创建窗口,命名为“win_nodeProperty”,用于显示结点信息,其内部对象如下:创建四个文本框,分别命名为“w_edtName”、“w_edtKey”、“w_edtText”、“w_edtPath”。创建一个自由报表,命名为“w_frptAttrib”,设置为3列,列名为“属性名”、“属性文本”、“属性key”。若干静态文本,完成后的画面如下图所示:3、脚本逻辑l&“读取”按钮中的脚本如下://载入文件:if !#win_xml.Load(#w_edtFileName.Text) thenMsgBox(&读取文件失败!&);endif&//将XML信息显示在树形控件上:int nRoot = #win_xml.GetRootNode();string strKey = &&;&#win_tree.DeleteAllNode();if nRoot&0 thenstrKey = #win_tree.AddSubItemTail(&&,&&);fun_ToTree(nRoot,strKey);endifl&fun_ToTree函数的声明如下:fun_ToTree函数体如下://Function name: fun_ToTreeint nNodeTemp = 0;string strNodeTemp = &&;&//设置树控件结点文本:#win_tree.SetNodeTxt(strFatherKey, #win_xml.GetNodeName(nNode) + & (& + fun_GetAttribInfo(nNode) + &)&);//将XML结点标识保存在对应的树控件结点中:#win_tree.SetNodeData(strFatherKey,nNode);&nNodeTemp = #win_xml.GetFirstChildNode(nNode);while nNodeTemp&0 do//在树控件上增加一个子结点:strNodeTemp = #win_tree.AddSubItemTail(strFatherKey,&&);//递归调用:fun_ToTree(nNodeTemp,strNodeTemp);nNodeTemp = #win_xml.GetNextNode(nNodeTemp);endwhile这个函数使用递归算法遍历XML结点信息。l&进入窗口脚本:OpenChild(&win_nodeProperty&);//打开属性信息窗口l&树形控件脚本:打开树形控件属性画面,点击“全局脚本”按钮,在弹出的画面中选择“单击脚本”,添加如下代码:fun_OnLbtnDown()fun_OnLbtnDown()函数体如下:int nData = -1;if #win_tree.GetCurSelNodeKey()&&&& thennData = #win_tree.GetCurSelNodeData();//刷新属性信息窗口:#win_nodeProperty.fun_ShowProperty(#win_xml,nData);endiffun_ShowProperty函数声明:fun_ShowProperty函数体:#w_edtKey.Val = nN#w_edtName.Text = #pXml.GetNodeName(nNode);#w_edtText.Text = #pXml.GetNodeText(nNode);&string strPath = &&;int nNodeTemp = 0;string strS = AscToChar(47);//斜杠作为路径分隔符&//向上遍历生成本结点的路径名:nNodeTemp = nNstrPath = #pXml.GetNodeName(nNode);while nNodeTemp&0 donNodeTemp = #pXml.GetParentNode(nNodeTemp);strPath = #pXml.GetNodeName(nNodeTemp) + strS + strPendwhile#w_edtPath.Text = strP&//生成属性报表:string strArrAttrinNames[];int i = 0;&#w_frptAttrib.DelTailRow(#w_frptAttrib.RowCount());#pXml.GetAttibNames(nNode,strArrAttrinNames);#w_frptAttrib.AddRow(strArrAttrinNames.GetCount());for i=0 to strArrAttrinNames.GetCount()#w_frptAttrib.SetRowHeight(i+1,40);#w_frptAttrib.SetTxt(1,i+1,strArrAttrinNames[i]);#w_frptAttrib.SetTxt(2,i+1,#pXml.GetAttribTextEx(nNode,&&,strArrAttrinNames[i]));#w_frptAttrib.SetVal(3,i+1,#pXml.GetAttrib(nNode,&&,strArrAttrinNames[i]));next#w_frptAttrib.SetInputFmtEdit(1,1,#w_frptAttrib.ColCount(),#w_frptAttrib.RowCount(),4);其中fun_GetAttribInfo函数用于生成指定XML结点的属性信息字符串,其函数声明如下:fun_GetAttribInfo函数体如下://Function name: fun_GetAttribInfostring strArrAttribNames[];int i = 0;string strText = &&;string strS = AscToChar(34);//双引号作为分隔符&if nNodeKey&0 then#win_xml.GetAttibNames(nNodeKey,strArrAttribNames);for i=0 to strArrAttribNames.GetCount()strText = strText + & & + strArrAttribNames[i] + &=& + strS + #win_xml.GetAttribTextEx(nNodeKey,&&,strArrAttribNames[i]) + strS;nextstrText = StrTrimLeft(strText);endif&RETURN strT四、结语这个示例演示了如何使用ObXml组件读取XML文件信息,如果想修改XML文件则可以调用ObXml组件中的相应函数,例如:bool SetRoot(string name,string text)用于设置或新建根结点;bool SetNodeName(int NodeKey,string NewName)用于设置结点名;bool SetAttrib(int NodeKey, string name, string Text)用于设置结点属性;bool Save()用于保存文件。
周点击排行周回复排行
[1203] [180] [158] [120] [120] [116] [107] [89] [83] [80]
[22] [18] [18] [16] [16] [11] [10] [10] [9] [9]最新求助
[0] [0] [3] [1] [3] [11] [1] [4] [9] [2]如何将一个xml文件转换为一个xsl文件
如何将一个xml文件转换为一个xsl文件
08-12-03 &匿名提问
这个必须改里面的代码呀 直接转换是不行的啊!他们两个的代码就不一样啊
请登录后再发表评论!php 读取 xml 文件属性值的问题_百度知道
php 读取 xml 文件属性值的问题
如图 怎样把该文件下的某个属性值读出来,如ap_name = 00_11_22_33_44_77
group_id = 0 这些值???
新手上路4\conf.xml&quot: I/O in
E:&#92: failed to load external entity &quot使用 simplexml解析是出现了这样的错误,求大神指点···
Warning: simplexml_load_file()
我有更好的答案
略看了看你的conf.xml文件,第一个&.$property3;property[2];/加载xml文件 $test=simplexml_load_file(&取出第二个message节点的所有的第三个property节点 $property3=$messages[1]-&property[1];// echo $property3[&name&].& = & echo $property2[&name&].& = &br/&&;.$property2.xml&); //?php &#47:<获取某个元素的值,或者属性值很多,不知道你具体的需求。示例如下;取出第二个message节点的所有的第二个property节点 $property2=$messages[1]-&&取出所有信息 $messages=$test-& // echo &message&节点没有闭合
php有操作xml的库吧,类似java的dom4j
求一小段代码指点···
为您推荐:
其他类似问题
php的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。高分悬赏 VB 根据节点名字获取XML文件中的对应节点的属性值_百度知道
高分悬赏 VB 根据节点名字获取XML文件中的对应节点的属性值
网上说getElementsByTagName方法可以,但是我试了下没搞出来。
如1.XML文件如下:
&4 Remark=&&&&/4&
如果我想获取节点4的Remark属性,应该怎么写这个查找语句。注意,我这是手动输入这个节点的名...
我有更好的答案
body remark=&George&lt,用数字作标签估计行不通;cnodeSet cnode=t &note&&quot.domdocument&)xmldoc.async=falsexmldoc.loadxml(xml)dim&&lt.text说实在;forget the meeting!&/body&gt,或许放到vb中也行;=&#8194,我试了下不能。这是用vbs脚本;&lt.CreateObject(&msxml2;heading&Reminder&/heading szqlay&quot.item(0).getElementsByTagName(&body&).item(0)MsgBox cnode.text &gtxml=&&Don'to&&MsgBox cnode./to&&from&John&/from&&WS/note&&Dim xmldocSet xmldoc &lt
Private&Sub&Command1_Click()Dim&xmlxml&=&&&note&&to&George&/to&&from&John&/from&&heading&Reminder&/heading&&&body&remark=&&szqlay&&&Don't&forget&the&meeting!&/body&&/note&&&Dim&xmldocSet&xmldoc&=&CreateObject(&msxml2.domdocument&)xmldoc.async&=&Falsexmldoc.loadxml&(xml)Dim&cnodeSet&cnode&=&xmldoc.getElementsByTagName(&body&).Item(0)MsgBox&cnode.TextMsgBox&cnode.Attributes.Item(0).TextEnd&Sub‘你复制到vb中,能运行了,这个CreateObject(&msxml2.domdocument&) 建立xmlDocument对象,是转门解析xml文本的。
采纳率:76%
来自团队:
为您推荐:
其他类似问题
xml文件的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何根据xml报文节点的属性值,取出此节点的内容,用xslt的方式_百度知道
如何根据xml报文节点的属性值,取出此节点的内容,用xslt的方式
例:&multiRef id=&id1& &97&/multiRef&找到id=id1的multiRef 节点,取出97的值
我有更好的答案
&xsl:value-of select=&;/&&&#47:for-each&&/multiRef[@id='id1']&quot&xsl:for-each select=&&#47.&quot
您好,我想再问个问题,如果是根据resultCode 的节点href属性的值id1找到值同为id=id1的multiRef 节点,可做到么?怎么写?&multiRef id=&id0&&
&resultCode href=&id1&/&&/multiRef&&multiRef id=&id1& &97&/multiRef&
这个得需要变量,我就不知道怎么做了。不确定XSLT能不能做。
恩,好的,谢谢了~~
采纳率:78%
来自团队:
为您推荐:
其他类似问题
xslt的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 从xml文件中提取数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信