📄 xmlhandler.java
字号:
Node node = findNode(getRootNode(), dn, attrName, attrValue);
if (node == null)
return null;
String value = ( (Element) node).getAttribute(resultAttrName);
return value;
}
public String getElementAttrByAttr(Node parentNode, String dn,
String attrName, String attrValue,
String resultAttrName) {
Node node = findNode(parentNode, dn, attrName, attrValue);
if (node == null)
return null;
String value = ( (Element) node).getAttribute(resultAttrName);
return value;
}
/**
* 取得一个节点的文本值
*
* @param dn 节点名,多层路径以"."分隔
* @return 文本值
*/
public java.lang.String getElementText(String dn) {
Node node = findNode(getRootNode(), dn);
if (node != null) {
if (node.hasChildNodes()) {
Node child = node.getFirstChild();
if (child.getNodeType() == Node.TEXT_NODE) {
CharacterData childText = (CharacterData) child;
String text = childText.getData();
return text;
}
}
}
return null;
}
/**
* 取得一个节点的文本值
*
* @param node 节点
* @return 文本值
*/
public java.lang.String getElementText(Node node) {
if (node != null) {
if (node.hasChildNodes()) {
Node child = node.getFirstChild();
if (child.getNodeType() == Node.TEXT_NODE) {
CharacterData childText = (CharacterData) child;
String text = childText.getData();
return text;
}
}
}
return null;
}
/**
* 取得多个同名节点的文本值
*
* @param dn 节点名,多层路径以"."分隔
* @param tagName 标记名
* @return 文本值数组
*/
public java.lang.String[] getElementsText(String dn, String tagName) {
Node[] nodes = findNodes(getRootNode(), dn, tagName);
if (nodes != null) {
String[] texts = new String[nodes.length];
for (int i = 0; i < nodes.length; i++) {
texts[i] = getElementText(nodes[i]);
}
return texts;
}
return null;
}
/**
* 取得多个同名节点的文本值
*
* @param parentNode 父节点
* @param dn 节点名,多层路径以"."分隔
* @param tagName 标记名
* @return 文本值数组
*/
public java.lang.String[] getElementsText(Node parentNode, String dn,
String tagName) {
Node[] nodes = findNodes(parentNode, dn + "." + tagName);
if (nodes != null) {
String[] texts = new String[nodes.length];
for (int i = 0; i < nodes.length; i++) {
texts[i] = getElementText(nodes[i]);
}
return texts;
}
return null;
}
/*
//取得多个同名节点的文本值
public java.lang.String [] getElementsText(String dn, String tagName, String attrName, String attrValue)
{
Node[] nodes = findNodes(getRootNode().getNodeName()+"."+dn, tagName, attrName, attrValue);
if(nodes!=null)
{
String[] texts=new String[nodes.length];
for(int i=0;i<nodes.length;i++)
{
texts[i]=getElementText(nodes[i]);
}
return texts;
}
return null;
}
*/
/**
* 取得多个同名节点的文本值
*
* @param dn 节点名,多层路径以"."分隔
* @return 文本值数组
*/
public java.lang.String[] getElementsText(String dn) {
int j = dn.lastIndexOf(".");
if (j != -1) {
String subdn = dn.substring(0, j);
String tagName = dn.substring(j + 1, dn.length());
return getElementsText(subdn, tagName);
}
else {
return getElementsText(dn, dn);
}
}
/**
* 取得多个同名节点的文本值
*
* @param parentNode 父节点
* @param dn 节点名,多层路径以"."分隔
* @return 文本值数组
*/
public java.lang.String[] getElementsText(Node parentNode, String dn) {
int j = dn.lastIndexOf(".");
if (j != -1) {
String subdn = dn.substring(0, j);
String tagName = dn.substring(j + 1, dn.length());
return getElementsText(parentNode, subdn, tagName);
}
else {
return getElementsText(parentNode, dn, dn);
}
}
/**
* 取得给定节点下节点的文本值
*
* @param parentNode 父节点
* @param dn 节点名,多层路径以"."分隔
* @return 文本值
*/
public String getElementText(Node parentNode, String dn) {
return getElementText(findNode(parentNode, dn));
}
/*
public String[] getElements(String dn)
{
return null;
}
*/
/**
* 取得根结点
*
* @return 根结点
*/
public Element getRootNode() {
if (document == null) {
return null;
}
return document.getDocumentElement();
}
/**
* 删除指定节点下所有子节点
*
* @param node 指定节点
*/
public void removeAllChilds(Node node) {
if (node == null)
return;
while (node.hasChildNodes()) {
node.removeChild(node.getFirstChild());
}
}
/**
* 系统输出字符串数组
*
* @param strs 字符串数组
*/
// public static void printArray(String[] strs)
// {
// for(int i=0;i<strs.length;i++)
// {
// System.out.println("array["+i+"]="+strs[i]);
// }
// }
/**
* 系统输出
*
* @param objects 对象数组
*/
public static void printArray(Object[] objects) {
for (int i = 0; i < objects.length; i++) {
System.out.println("array[" + i + "]=" + objects[i]);
}
}
/**
* 添加根节点
*
* @param rootName 节点名
* @return 根节点
*/
public Node addRootNode(String rootName) {
Node oldRoot = document.getFirstChild();
if (oldRoot != null)
document.removeChild(oldRoot);
Element root = document.createElement(rootName); // Create Root Element
return document.appendChild(root); // Add Root to Document
}
/**
* 在给定节点下添加节点
*
* @param parentNode 父节点
* @param nodeName 节点名
* @return node added
*/
public Node addNode(Node parentNode, String nodeName) {
Element element = document.createElement(nodeName); // Create Element
return parentNode.appendChild(element);
}
/**
* 在给定节点下添加带属性节点
*
* @param parentNode 父节点
* @param nodeName 节点名
* @param attrNames 属性名数组
* @param attrValues 属性值数组
* @return 添加的节点
*/
public Node addNodeWithAttrs(Node parentNode, String nodeName,
String attrNames[], String attrValues[]) {
if (nodeName == null || nodeName.length() == 0)
return null;
Element element = document.createElement(nodeName); // Create element
addAttrs(element, attrNames, attrValues);
return parentNode.appendChild(element);
}
/**
* 对给定节点添加属性
*
* @param element 节点
* @param attrNames 属性名数组
* @param attrValues 属性值数组
*/
public void addAttrs(Element element, String attrNames[], String attrValues[]) {
if (element == null)
return;
if (attrNames == null || attrNames.length == 0)
return;
for (int i = 0; i < attrNames.length; i++) {
element.setAttribute(attrNames[i], attrValues[i]);
}
}
/**
* 在给定节点下添加文本
*
* @param node 给定节点
* @param text 文本
*/
public void addText(Node node, String text) {
if (node == null)
return;
Node textNode = document.createTextNode(text);
node.appendChild(textNode);
}
/**
* 在给定节点下添加文本
*
* @param parentNode 父节点
* @param dn 节点名,多层路径以"."分隔
* @param text 文本
*/
public void addText(Node parentNode, String dn, String text) {
if (parentNode == null)
return;
addText(findNode(parentNode, dn), text);
}
/**
* 在给定节点下添加带文本节点
*
* @param parentNode 给定节点
* @param nodeName 节点名
* @param text 文本
* @return 添加的节点
*/
public Node addNodeWithText(Node parentNode, String nodeName, String text) {
if (parentNode == null)
return null;
Element element = document.createElement(nodeName);
Node textNode = document.createTextNode(text);
element.appendChild(textNode);
return parentNode.appendChild(element);
}
/**
* 在给定节点下取CDATA
*
* @param parentNode 给定节点
* @return CDATA文本
*/
public String getCDATA(Node parentNode) {
if (parentNode == null)
return null;
NodeList list = parentNode.getChildNodes();
if (list == null)
return null;
String data = null;
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
if (child.getNodeType() == Node.CDATA_SECTION_NODE) {
data = ( (CDATASection) child).getData();
break;
}
}
return data;
}
/**
* 在给定节点下添加CDATA
*
* @param node 给定节点
* @param text 文本
* @return CDATA node added
*/
public Node addCDATA(Node node, String text) {
if (node == null)
return null;
Node CDATANode = document.createCDATASection(text);
return node.appendChild(CDATANode);
}
/**
* 添加namespace节点
*
* @param node 给定节点
* @param namespaceURI namespace URI of the element to create.
* @param qualifiedName qualified name of the element type to instantiate.
* @return NS node added
*/
public Node addNS(Node node, String namespaceURI, String qualifiedName) {
if (node == null)
return null;
Node nsNode = document.createElementNS(namespaceURI, qualifiedName);
return node.appendChild(nsNode);
}
/**
* 写入文件
*/
public void write() {
try {
OutputFormat format = new OutputFormat(document); //Serialize DOM
format.setIndenting(true);
FileOutputStream fileOut = new FileOutputStream(this.file); //Writer will be a File
XMLSerializer serial = new XMLSerializer(fileOut, format);
serial.asDOMSerializer(); // As a DOM Serializer
serial.serialize(document.getDocumentElement());
fileOut.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
/*
public static void main(String[] argv) throws Exception
{
XmlHandler xh=new XmlHandler("atm_omp.xml");
Element rootNode=xh.getRootNode();
System.out.println(rootNode.getNodeName());
System.out.println(rootNode.toString());
//测试取得多个同名节点
System.out.println("测试取得多个同名节点");
Node[] nodes=xh.findNodes(rootNode,"class");
System.out.println(nodes.length);
for(int i=0;i<nodes.length;i++)
{
System.out.println(nodes[i]);
}
nodes=xh.findNodes(rootNode,"logical-object","item");
System.out.println(nodes.length);
for(int i=0;i<nodes.length;i++)
{
System.out.println(nodes[i]);
}
//测试通过属性找到同名节点的指定节点(第一个匹配)
System.out.println("测试通过属性找到同名节点的指定节点");
Node node=xh.findNode(rootNode , "logical-object","objectid","object1");
System.out.println(node);
node=xh.findNode("logical-object","objectid","object1");
System.out.println(node);
//测试取得多个同名节点的属性
System.out.println("测试取得多个同名节点的属性");
String[] attrs=xh.getElementsAttr("logical-object","objectid");
System.out.println(attrs.length);
printArray(attrs);
attrs=xh.getElementsAttr(node,"item","itemid");
System.out.println(attrs.length);
printArray(attrs);
attrs=xh.getElementsAttr(xh.findNode("logical-object","objectid","object1"),"item","lastvalue");
System.out.println(attrs.length);
printArray(attrs);
//测试删除节点
System.out.println("测试删除节点");
Node viewConfigNode = xh.findNode(xh.getRootNode(),"birdview-config");
//xh.removeAllChilds(viewConfigNode);
Node[] nodes=xh.findNodes(xh.getRootNode(),"birdview-config.logical-object");
System.out.println(nodes.length);
for(int i=0;i<nodes.length;i++)
{
System.out.println(nodes[i]);
}
XmlHandler xh=new XmlHandler("logical_object_config.xml");
Node[] nodes=xh.findNodes(xh.getRootNode(),"logical-object");
printArray(nodes);
System.out.println("-----------------------");
String text1=xh.getElementText(nodes[0],"rule.event-set");
System.out.println(text1);
System.out.println("-----------------------");
nodes=xh.findNodes(xh.getRootNode(),"logical-object","name");
printArray(nodes);
System.out.println("-----------------------");
Node node=xh.findNode(xh.getRootNode(),"logical-object","local-id","1");
System.out.println("xh.findNode "+node);
//测试取得节点的文本值
System.out.println("测试取得节点的文本值");
String text=xh.getElementText("logical-object.local-id");
System.out.println(text);
//测试取得多个同名节点的文本值
System.out.println("测试取得多个同名节点的文本值");
String[] texts=xh.getElementsText("logical-object.name");
printArray(texts);
texts=xh.getElementsText("logical-object","name");
printArray(texts);
XmlHandler xh = new XmlHandler("ns_test",XmlHandler.READ_WRITE_MODE);
Node rootNode = xh.addRootNode("styles");
//Node nsNode = xh.addNS(rootNode,"http://www.w3.org/2001/XMLSchema-instance","xsi");
((Element)rootNode).setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
((Element)rootNode).setAttributeNS("","xsi:noNamespaceSchemaLocation","ilog/cpl/schema/styles.xsd");
xh.write();
XmlHandler xh1 = new XmlHandler("testwrite.xml", XmlHandler.READ_WRITE_MODE);
XmlHandler xh = new XmlHandler("view_config.xml");
Element rootNode = xh.getRootNode();
xh1.addRootNode(rootNode.getNodeName());
System.out.println(xh1.getRootNode().getNodeName());
xh1.addNode(xh1.getRootNode(),"logicalobject");
String[] attrs1 = {"objectid"};
String[] values1 = {"逻辑对象1"};
xh1.addNodeWithAttrs(xh1.getRootNode(),"logicalobject",attrs1,values1);
String[] attrs=xh.getElementsAttr(xh.findNode("logicalobject","objectid","object1"),"item","itemid");
printArray(attrs);
String[] values=xh.getElementsAttr(xh.findNode("logicalobject","objectid","object1"),"item","lastvalue");
printArray(values);
String[] name = {"itemid","value"};
String[] value = new String[2];
for(int i=0;i<attrs.length;i++){
value[0] = attrs[i];
value[1] = values[i];
xh1.addNodeWithAttrs(xh1.findNode("logicalobject","objectid","逻辑对象1"),"item",name,value);
}
xh1.write();
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -