PB如何解析XML文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PB如何解析XML文件相关的知识,希望对你有一定的参考价值。
PB如何解析XML文件,比如我文件放在C盘根目录下,1.xml 如何通过PB读入文件并且解析里面的内容。最好有例子
可以使用文件读取的方式,你先把C盘中的1.XML文件读入到一个字符型变量中,然后使用FIND的方式,查找XML文件的关键字定位,然后使用MID函数字符串截取的方式来截取XML文件中的值。假设我的1.xml有如下内容
<pk_corp>0001</pk_corp>
//将文件读入ls_text
string ls_text
li_FileNum = FileOpen("C:\1.xml", StreamMode!)
FileRead(li_FileNum, ls_text)
FileClose(li_FileNum)
//利用POS截取
long ll_start_pos, ll_end_pos
ll_start_pos = Pos( ls_text, "<pk_corp>", 1 )
ll_end_pos = Pos( ls_text, “</pk_corp>", 1 )
-------得到内容
string ls_value
ls_value = mid(ls_text, ll_start_pos + 9, ll_end_pos - ll_start_pos - 9)
这样可以得到ls_value = '0001' 参考技术A 一般都是直接通过数据窗口导出xml。然后再倒入xml为PB导入导出数据的一大课题,
如果您感兴趣我可以给您提供完整代码和指导.每个xml中的模板格式都是不同的,如果是通过pb数据窗口导出的 是根据数据窗口设计画板(就是编剧数据窗口的画板中)最下方的导出模板设置的..如果不是也是有规律可循的. 你要根据其中的段落来进行导出 .
大致的顺序是 (获得文件路径和文件名)(打开文件,获得该文件句柄)GetFileOpenName() -(利用句柄打开文件所有数据)fileopen()- fileread() 然后再根据代码段标识符!用Mid截取你所需要的那一段数据.
具体事例代码如下:
假设1.xml文件有如下内容
<dj>750</dj>
//选择路径
string ls_filename//文件名
stringls_fullname//完整路径+文件名
long li_filenum
If GetFileOpenName ("请选择文件", ls_fullname, ls_Filename,"XML", "all Files (*.XML),*.XML",docname) < 1 THEN
RETURN
ELSE
ls_fullname = Trim(ls_fullname)
END IF
ls_filename = lower(ls_filename)//小写文件(一般存成的文件读取是.xml不是大写的.XML)
li_FileNum = FileOpen(ls_fullname,StreamMode!,Read!,LockWrite!)
FileRead(li_FileNum,ls_temp)
/利用POS截取
long ll_start, ll_end
ll_start = Pos( ls_text, "<dj>", 1 )
ll_end_ = Pos( ls_text, “</dj>", 1 )
//截取所获得内容
string ls_str
ls_str = mid(ls_temp,ll_start + 4,ll_end - 1)
//此时ls_str = '75' 参考技术B 学习一下PBDOM吧
如何使用 XmlNodeList 解析 XML 文件
【中文标题】如何使用 XmlNodeList 解析 XML 文件【英文标题】:How Can I Parse an XML file using XmlNodeList 【发布时间】:2019-10-18 17:24:45 【问题描述】:我的任务是获取一个 XML 文件并将其转换为新的 XML。我没有使用 XML 文档的经验,但我已经能够使用下面显示的代码从第一个 XML 文档中获取一些数据。请注意,并非所有代码都只是一个小示例。
XmlDocument rssXmlDoc = new XmlDocument();
// Load the RSS file from the RSS URL
rssXmlDoc.Load("https://agency.governmentjobs.com/jobfeed.cfm?agency=ocso");
// Setup name space
XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssXmlDoc.NameTable);
nsmgr.AddNamespace("joblisting", "http://www.neogov.com/namespaces/JobListing");
// Parse the Items in the RSS file
XmlNodeList rssNodes = rssXmlDoc.SelectNodes("rss/channel/item/");
// Iterate through the items in the RSS file
foreach (XmlNode rssNode in rssNodes)
XmlNode rssSubNode = rssNode.SelectSingleNode("title");
string title = rssSubNode != null ? rssSubNode.InnerText : "";
使用此代码,我可以获得大部分元素。尝试从子元素获取数据时遇到了困难。我无法获取的 XML 部分如下所示。
<joblisting:department>Supply</joblisting:department>
<guid isPermaLink="true">https://www.governmentjobs.com/careers/ocso/Jobs/2594527</guid>
<joblisting:categories>
<joblisting:category xmlns:joblisting="http://www.neogov.com/namespaces/JobListing" xmlns:atom="http://www.w3.org/2005/Atom">
<CategoryCode>ClericalDataEntry</CategoryCode>
<Category>Clerical & Data Entry</Category>
</joblisting:category>
<joblisting:category
</joblisting:categories>
但我无法获得所有数据。如何获取以 guid isPermaLink="true"
开头的元素的值对于 joblisting:categories 我使用了一个 foreach 循环来读取这些值
foreach (var item in rssSubNode.SelectNodes("joblisting:categories", nsmgr))
rssSubNode = rssSubNode = rssNode.SelectSingleNode("joblisting:category", nsmgr);
string category = rssSubNode != null ? rssSubNode.InnerText : "";
如何读取这些子元素的值?
【问题讨论】:
"...获取一个 XML 文件并将其转换为新的 XML..." 使用 XSLT 转换来实现更好、更容易。 【参考方案1】:要读取 guid 节点,您可以使用以下代码。请注意,在节点中使用 selectSingleNode 包含“项目”节点。
public static void test()
XmlDocument rssXmlDoc = new XmlDocument();
// Load the RSS file from the RSS URL
rssXmlDoc.Load("https://agency.governmentjobs.com/jobfeed.cfm?agency=ocso");
// Setup name space
XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssXmlDoc.NameTable);
nsmgr.AddNamespace("joblisting", "http://www.neogov.com/namespaces/JobListing");
// Parse the Items in the RSS file
XmlNodeList rssNodes = rssXmlDoc.SelectNodes("rss/channel/item");
// Iterate through the items in the RSS file
foreach (XmlNode rssNode in rssNodes)
var xmlnode = rssNode.SelectSingleNode("guid ");
System.Console.WriteLine("the value of guid is =>" + xmlnode.InnerText);
XmlNode rssSubNode = rssNode.SelectSingleNode("title");
string title = rssSubNode != null ? rssSubNode.InnerText : "";
【讨论】:
要读取子节点,您可以使用 foreach (XmlNode rssNodechild in rssNodes.ChildNodes)以上是关于PB如何解析XML文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QXmlStreamReader 解析包含对其他 XML 文件的引用的 XML 文件?
如何使用 System.Xml.Linq 解析 xml 文件