package com.trs.rws.tools;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import com.trs.tool.*;
import com.trs.tool.Logger;
import com.trs.tool.TException;
/**
* <p>Title: xml操作类</p>
* <p>Description: 操作xml文件或者XML内存对象,得到某个节点的值!</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: www.trs.com.cn</p>
* @author huanghongfa
* @version 1.0
*/
public class OperateXML
{
private Document docDOMSource = null;
/**
* 构造函数
*/
public OperateXML()
{
super ();
}
/**
* 构造函数
* @param docDOMSource 内存中Document对象
*/
public OperateXML(Document docDOMSource)
{
super ();
this.docDOMSource = docDOMSource;
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param docDOMSource 内存中Document对象
*/
public void setDOMSource(Document docDOMSource)
{
this.docDOMSource = docDOMSource;
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param fDOMSource xml文件
*/
public void setDOMSource(File fDOMSource)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (fDOMSource);
doc.normalize ();
this.docDOMSource = doc;
}
catch(javax.xml.parsers.ParserConfigurationException pce)
{
pce.printStackTrace();
// throw new TException ("The parser was not configured correctly.", "", pce);
//System.out.println("The parser was not configured correctly.");
}
catch(java.io.IOException ie)
{
ie.printStackTrace();
// throw new TException ("Cannot read input file.", "", ie);
//System.out.println("Cannot read input file.");
}
catch(org.xml.sax.SAXException se)
{
se.printStackTrace();
// throw new TException ("Problem parsing the file.", "", se);
//System.out.println("Problem parsing the file.");
}
catch(java.lang.IllegalArgumentException ae)
{
ae.printStackTrace();
// throw new TException ("Please specify an XML source.", "", ae);
//System.out.println("Please specify an XML source.");
}
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param ByteArrayInputStream 可以通过如下方法得到
* ByteArrayInputStream bais = new ByteArrayInputStream(strGet.getBytes("GBK"));
*/
public void setDOMSource(ByteArrayInputStream bais)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (bais);
doc.normalize ();
this.docDOMSource = doc;
}
catch(Exception ex)
{
ex.printStackTrace();
// Logger.log("解释xml的时候发生错误,输入的字符串不符合xml格式!" + ex.toString (),"exp");
// throw new TException ("解释xml的时候发生错误,输入的字符串不符合xml格式!" + ex.toString (), "");
}
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param strXMLFileName xml文件名称,如:C:\\temp\\test.xml 格式
*/
public void setDOMSource(String strXMLFileName)
throws TException
{
try
{
File fDOMSource = new File (strXMLFileName);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (fDOMSource);
doc.normalize ();
this.docDOMSource = doc;
}
catch(javax.xml.parsers.ParserConfigurationException pce)
{
pce.printStackTrace();
// throw new TException ("The parser was not configured correctly.", "OperateXML,setDOMSource()");
}
catch(java.io.IOException ie)
{
ie.printStackTrace();
// throw new TException ("Cannot read input file.", "OperateXML,setDOMSource()");
}
catch(org.xml.sax.SAXException se)
{
se.printStackTrace();
// throw new TException ("Problem parsing the file.", "OperateXML,setDOMSource()");
}
catch(java.lang.IllegalArgumentException ae)
{
ae.printStackTrace();
// throw new TException ("Please specify an XML source.", "OperateXML,setDOMSource()");
}
}
/**
* 设置DOMSource,以便对这个xml对象进行操作
* @param ByteArrayInputStream 可以通过如下方法得到
* ByteArrayInputStream bais = new ByteArrayInputStream(strGet.getBytes("GBK"));
*/
public void setDOMSource(InputStream is)
throws TException
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
DocumentBuilder builder = factory.newDocumentBuilder ();
Document doc = builder.parse (is);
doc.normalize ();
this.docDOMSource = doc;
}
catch(Exception ex)
{
ex.printStackTrace();
// throw new TException ("解释xml的时候发生错误,输入的XML文件流格式错误!" + ex.toString (), "");
}
}
/**
* 得到DOMSource
* @return org.w3c.dom.Document
*/
public Document getDOMSource()
{
return this.docDOMSource;
}
/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public String getValueByTargetName(String strTargetName)
{
String strValue = "";
NodeList nodelist = null;
Node node;
try
{
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
if(nodelist.getLength () != 0)
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
int i = nodelist.getLength ();
if(i == 1)
{
if(node.getFirstChild () != null)
{
strValue = node.getFirstChild ().getNodeValue ();
}
}
else
{
for(int j = 1; j < i; j++)
{
node = nodelist.item (j);
if(node.getNodeType () == Node.CDATA_SECTION_NODE)
{
strValue = node.getNodeValue ();
break;
}
}
}
}
return strValue;
}
catch(DOMException ex)
{
// Logger.log(ex.getMessage(),"exp");
return null;
}
}
/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public Hashtable getChildrenNodeNameAndValueByTargetName(String strTargetName)
{
Hashtable ht = new Hashtable ();
NodeList nodelist = null;
Node node;
int i, nSize;
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
if(nodelist.getLength () != 0)
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
nSize = nodelist.getLength ();
for(i = 0; i < nSize; i++)
{
node = nodelist.item (i);
if(node!=null && node.getNodeType()!=Node.TEXT_NODE)
{
if(node.getFirstChild ()!=null)
{
ht.put (node.getNodeName (), node.getFirstChild ().getNodeValue ());
}
else
{
ht.put (node.getNodeName (), "");
}
}
}
}
return ht;
}
/**
* 通过置标名称,得到该置标节点的值
* @param strTargetName 该置标的名称
*/
public String[] getChildrenNodeValuesByTargetName(String strTargetName)
{
String[] arrValue=null;
NodeList nodeHList=null;
NodeList nodelist = null;
Node node;
int i, nSize;
nodeHList = docDOMSource.getElementsByTagName (strTargetName.trim ());
arrValue=new String[nodeHList.getLength ()];
if(nodeHList.getLength () != 0)
{
for(i=0;i<nodeHList.getLength();i++)
{
node = nodeHList.item (i);
nodelist = node.getChildNodes ();
if(nodelist.item(0)!=null)
{
if(nodelist.item (0).getNodeValue () == null)
{
arrValue[i] = "";
}
else
{
arrValue[i] = nodelist.item (0).getNodeValue ();
}
}
else
{
arrValue[i] ="";
}
}
}
return arrValue;
}
/**
* 通过置标的路径,得到该置标节点的值
* @param strTargetPath 该置标的路径
* @param ch 路径的隔开符号,如:可以这样调用这个方法:getValueByTargetPath("xml/test/ok",'/');
* @return String 假如不存在,就为空“”
*/
public String getValueByTargetPath(String strTargetPath, int ch)
{
String strPath = strTargetPath.trim ();
String strTargetName = null;
NodeList nodelist = null;
Node node = null;
Element element = null;
int nPosition = 0;
String strValue = "";
//得到第一个节点元素(begin)
nPosition = strPath.indexOf (ch);
strTargetName = strPath.substring (0, nPosition);
strPath = strPath.substring (nPosition + 1);
nodelist = docDOMSource.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
element = (Element) nodelist.item (0);
}
//得到第一个节点元素(end)
//循环解释路径,得到最低层的节点的值(begin)
while(!strPath.equals (""))
{
nPosition = strPath.indexOf (ch);
if(nPosition == -1)
{
strTargetName = strPath;
nodelist = element.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
node = nodelist.item (0);
nodelist = node.getChildNodes ();
int i = nodelist.getLength ();
if(i == 1)
{
if(node.getFirstChild () != null)
{
strValue = node.getFirstChild ().getNodeValue ();
}
}
else
{
for(int j = 1; j < i; j++)
{
node = nodelist.item (j);
if(node.getNodeType () == Node.CDATA_SECTION_NODE)
{
strValue = node.getNodeValue ();
break;
}
}
}
}
strPath = "";
}
else
{
strTargetName = strPath.substring (0, nPosition);
nodelist = element.getElementsByTagName (strTargetName);
if(nodelist.getLength () == 0)
{
return null;
}
else
{
element = (Element) nodelist.item (0);
}
strPath = strPath.substring (nPosition + 1);
}
}
//循环解释路径,得到最低层的节点的值(end)
return strValue;
}
/**
* 通过置标名称,得到该置标在XML中是否存在.
* @param strTargetName 该置标的名称
*/
public int getElementExist(String strTargetName)
{
int int_Counts=0;
NodeList nodelist = null;
try
{
nodelist = docDOMSource.getElementsByTagName (strTargetName.trim ());
int_Counts=nodelist.getLength ();
}
catch(DOMException ex)
{
// Logger.log (ex.getMessage (), "exp");
int_Counts=0;
}
finally
{
return int_Counts;
}
}
}
分享到:
相关推荐
C#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、修改、删除).htmC#中操作xml文件(插入节点、...
在这个过程中,理解XPath(XML路径语言)也可以帮助更高效地定位XML节点。XPath是用于在XML文档中查找信息的语言,尽管在C#中不是必需的,但它提供了一种强大而灵活的方式来定位节点。 总之,C#通过`XDocument`类...
本实例将深入探讨如何在VB环境中不依赖XML.DLL库来读取XML文件的节点值。 首先,我们需要了解XML文件的基本结构。XML文件由一系列的元素(Element)组成,每个元素可以有属性(Attribute)和子元素。元素通过标签...
对于不规范的XML,可能需要进行额外的错误检查和处理,例如验证XML是否符合语法规则,或者在添加节点时处理潜在的命名冲突。C#的XmlReader和XmlWriter类可以帮助我们处理这些情况,它们分别用于读取和写入XML数据,...
这个小测试程序的核心功能就是基于这些基本操作实现的,它不需要依赖任何第三方库,提供了便捷的方式处理多层XML节点,特别适合用于程序配置文件的读写。在实际项目中,为了代码的可维护性和健壮性,建议封装成类或...
3. **操作XML节点**:通过CXmlNode对象,查找、修改或创建XML节点。例如,找到特定ID的元素,更改其属性值,或者添加新的子节点。 4. **处理节点集合**:CXmlNodes类可以用来管理一组节点,如遍历所有子元素,或者...
标题中的“PB”指的是PowerBuilder,一款经典的面向对象的编程工具,主要用于开发企业级的应用程序。...通过参考示例代码,开发者可以学习到如何根据XPath定位XML节点,并从中提取所需信息,提升他们的编程技能。
总结,PowerBuilder 9为处理XML文件提供了强大的支持,通过XMLDocument对象和DOM解析器,我们可以轻松地读取、写入和操作XML数据。这些功能使PB9成为开发涉及XML的应用的理想工具,帮助开发者高效地完成数据交换和...
下面是一个简单的易语言源码示例,展示了如何读取XML文件中指定节点的值: ```易语言 .声明函数 读取XML 调用库 "系统核心", "创建XML文档", 文档路径, 文档 .如果 错误代码 ≠ 0 .显示 错误信息 .退出程序 .结束...
无论使用哪种语言,修改XML节点值的过程都遵循类似的步骤:解析文件,找到目标节点,修改节点值,然后保存更改。在实际操作中,应确保正确处理可能出现的异常,并根据具体需求进行适当的错误处理和边界条件检查。
- DOM允许开发者将XML文件加载到内存中,形成一个可操作的对象树。使用C#或VB.NET,可以使用`System.Xml.XmlDocument`类来加载XML文件,然后通过节点遍历和操作来读写数据。 4. **LINQ to XML**: - .NET ...
本篇文章将详细讲解如何在Delphi中创建简单的XML文件,并介绍如何读取XML子节点下的所有属性。 首先,让我们了解XML的基本结构。XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等构成,...
`xmlread`用于读取XML文件并将其转换为一个文档对象模型(DOM)树,而`xmlwrite`则可以将DOM树写回到XML文件。DOM树是一种数据结构,它代表了XML文件的整个内容,允许我们遍历和修改文件的各个部分。 例如,假设...
#### 二、读取XML节点数据 **1. 加载XML文档** 要开始读取XML文件,首先需要加载文件到`XmlDocument`对象中: ```csharp string filename = Server.MapPath("/") + @"WebApplication1\web.config"; XmlDocument ...
// 初始化QTreeWidgetItem,用于存储XML节点 QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget); rootItem->setText(0, "XML根节点"); // 开始解析XML while (!reader.atEnd()) { reader.read...
8. **QDomElement与QDomNode**: `QDomElement`代表XML文档中的元素节点,而`QDomNode`是所有XML节点的基类,包括元素、注释、文本等。它们都提供了丰富的操作接口,用于处理XML文档的不同部分。 以上就是使用QT进行...
你可以使用QDomDocument的parse()方法加载XML字符串或文件,将其转换为内存中的对象模型。例如: ```cpp QFile file("example.xml"); file.open(QIODevice::ReadOnly | QIODevice::Text); QDomDocument doc; if (!...
使用DOM方法读取XML文件,需要创建DocumentBuilderFactory对象,获取DocumentBuilder对象,然后解析XML文件得到Document对象。最后,使用Document对象的getElementsByTagName方法获取指定标签的节点列表,并遍历节点...
4. **修改XML节点**: 可以通过XmlNode的属性和方法来修改节点的值或属性。例如,要修改某个节点的文本内容: ```csharp XmlNode node = doc.SelectSingleNode("//element_name"); node.InnerText = "new_value...
4. **XmlNodeList**: 用来存储一系列XmlNode对象,通常用于遍历XML节点。 要**增加节点**,我们先创建一个新的XmlElement对象,然后通过`AppendChild`或`InsertAfter`等方法将其添加到父节点中。例如,向上面的XML...