XML解析器接口—java版

//AddressPointer.java

public class AddressPointer implements Cloneable

{

CXMLObject m_Ptemp = null;

CXMLObject get()

{

return m_Ptemp;

}

public AddressPointer()

{

m_Ptemp = null;

}

void set( CXMLObject pToSet )

{

m_Ptemp = pToSet;

//pToSet =

}

void attach( CXMLObject pToSet )

{

m_Ptemp = pToSet;

}

public AddressPointer clone()

{

return new AddressPointer();

}

}

//MainTest.java

import javax.naming.spi.*;

class TestObj

{

}

class Test

{

//TestObj to =null;

void set( Test te )

{

//to = te;

}

void attach( Test te )

{

te = new Test();//this;

te.n = 9;

}

int n=0;

int get()

{

return n;

}

}

public class MainTest

{

Test t = new Test();

MainTest()

{

//TestObj t = null;

//System.out.println(ts.to);

//ts.set(t);

t.n = 8;

t.attach(t);

com(t);

System.out.println( t.get() );

}

void com(Test r)

{

System.out.println( r == t );

}

public static void main(String[] args)

{

//new MainTest();

try{

CXMLStructBuilder cb = new CXMLStructBuilder();

cb.prepareParseXML();

CXMLObject obj = cb.BuildTree("ConCmd.xml");

/*String strName = obj.GetNodeName();

System.out.println( obj.GetNodeName() );

System.out.println( obj.m_pThreaded_Preorder.GetNodeName() );

System.out.println( obj.m_pThreaded_Preorder.m_pThreaded_Preorder.GetNodeName() );

System.out.println( obj.m_pThreaded_Preorder.m_pThreaded_Preorder.m_pThreaded_Preorder.GetNodeName() );

System.out.println( obj.m_pThreaded_Preorder.m_pThreaded_Preorder.m_pThreaded_Preorder.m_pThreaded_Preorder.GetNodeName() );

*/

while( obj.m_pThreaded_Preorder != null )

{

System.out.println( obj.GetNodeName() );

obj = obj.m_pThreaded_Preorder;

}

CXMLObject obf = cb.FindNamedNode("cmdtype", obj);

/*do{

//Thread.sleep(200);

System.out.println( obf.FindAttribute("name"));

}while((obf = cb.FindNamedNode("cmdtype", obf)) != null);

//System.out.println( strName );*/

}catch(Exception e){

e.printStackTrace();

}

}

}

//CXMLStructBuilder.java

import java.net.URL;

import javax.xml.*;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.*;

import java.net.*;

import java.io.*;

public class CXMLStructBuilder

{

public CXMLStructBuilder()

{

m_pXmlTreeRoot=null;

}

protected DocumentBuilderFactory dbf=null;

protected DocumentBuilder db=null;

protected Document doc=null;

protected String fileName=null;

//对外的接口,生成必要的解析对象。

public void prepareParseXML()throws Exception

{

if(db==null)

try{

dbf = DocumentBuilderFactory.newInstance();

db = dbf.newDocumentBuilder();

}catch(Exception e){

throw e;//.printStackTrace();

}

}

private Node getXMLRoot(URL url)throws Exception

{

try

{

doc = db.parse(url.openStream());

}

catch(Exception e)

{

e.printStackTrace();

}

return (Node)doc.getDocumentElement();

}

private boolean BuildXMLObject( Node pRoot , int iLevel , CXMLObject pParant )

{

try{

if( pRoot == null )

{

return false;

}

String bstr;

if( (bstr = pRoot.getNodeName())==null )

{

return false;

}

CXMLObject pChildNode = null;

pChildNode = new CXMLObject( bstr,iLevel,pParant );

if( pChildNode == null )

{

return false;

}

pParant.AddChild( pChildNode );

BuildAttribute( pRoot, pChildNode );

NodeList pXMLChildNodeList = null;

if( (pXMLChildNodeList = pRoot.getChildNodes()) ==null )

{

return false;

}

Node pXMLChildNode = null;

int lNodeCount = 0;

lNodeCount = pXMLChildNodeList.getLength();

for( int j = 0; j < lNodeCount; ++j )

{

if( j%2 != 0 )

{

if( ( pXMLChildNode = pXMLChildNodeList.item( j )) == null )//->get_item( j, &pXMLChildNode ) ) )

{

pXMLChildNodeList = null;

return false;

}

if( !BuildXMLObject( pXMLChildNode,iLevel+1, pChildNode ) )

{

pXMLChildNode = null;

pXMLChildNodeList = null;

return false;

}

}

}

}catch(Exception e){

e.printStackTrace();

return false;

}

return true;

}

private boolean BuildAttribute( Node pNode , CXMLObject pThis )

{

try{

NamedNodeMap pXMLNodeMap = null;

if(( pXMLNodeMap = pNode.getAttributes()) == null )

{

return false;

}

if( pXMLNodeMap != null)

{

Node pXMLAttributeNode = null;

int lAttributeCount = 0;

lAttributeCount = pXMLNodeMap.getLength();

for( int i = 0; i < lAttributeCount; ++i )

{

if( (pXMLAttributeNode = pXMLNodeMap.item( i ) ) == null )

{

pXMLNodeMap = null;

return false;

}

String bstrName;

String cstrName;

if( ( bstrName = pXMLAttributeNode.getNodeName()) == null)//get_nodeName( &bstrName ) ) )

{

pXMLAttributeNode = null;

pXMLNodeMap = null;

return false;

}

cstrName = bstrName;//.Format( _T( "%S" ), bstrName );

String vstrValue;

if(( vstrValue = pXMLAttributeNode.getNodeValue()) == null)// -> get_nodeValue( &vstrValue ) ) )

{

pXMLAttributeNode = null;

pXMLNodeMap = null;

return false;

}

String cstrValue;

cstrValue = vstrValue;

pThis.AddAttribute( cstrName, cstrValue );

}

}

}catch( Exception e ){

e.printStackTrace();

return false;

}

return true;

}

public CXMLObject BuildTree( String szPath )

{

CXMLObject pRoot = null;

URL url = null;

Node root = null;

try{

File xmlFile = new File( szPath );

url = xmlFile.toURL();

root = getXMLRoot( url );

}catch(Exception e){

e.printStackTrace();

}

try{

if( m_pXmlTreeRoot != null )

DestroyTree();

String strNodeName = root.getNodeName();

m_pXmlTreeRoot = new CXMLObject( /*strNodeName*/"ROOT", 0, null );

pRoot = m_pXmlTreeRoot;

BuildXMLObject( root , 1 , m_pXmlTreeRoot );

//AddressPointer pre = new AddressPointer();

//pre.set(m_pXmlTreeRoot.m_pThreaded_Preorder);

//

int iArrayCount=m_pXmlTreeRoot.GetChildrenCount();

CXMLObject.m_Thread = m_pXmlTreeRoot;

//CXMLObject pNewBefore = m_pXmlTreeRoot.m_Thread;

for( int i = 0;i < iArrayCount; i++ )

{

/*CXMLObject pToPreGo = null;

if( i == 0 )

pToPreGo = m_pXmlTreeRoot;

else if( i >0 && i != iArrayCount-1 )

pToPreGo = m_pXmlTreeRoot.m_aChildren.elementAt( i-1 );

else if( i == iArrayCount - 1)

pToPreGo = m_pXmlTreeRoot.m_aChildren.elementAt( i );*/

if( !( m_pXmlTreeRoot.m_aChildren.elementAt( i ).Threaded_Preorder( CXMLObject.m_Thread ) ) )

{

//return false;

}

}

//

//m_pXmlTreeRoot.Threaded_Preorder( pre );

}catch(Exception e){

e.printStackTrace();

return null;

}

return pRoot;

}

public CXMLObject FindNamedNode( String szNodeName , CXMLObject pStartNode )

{

CXMLObject pRoot = pStartNode;

pRoot = pRoot.m_pThreaded_Preorder;

while ( pRoot != null )

{

if ( pRoot.GetNodeName().equals( szNodeName ) )

{

return pRoot;

}

pRoot = pRoot.m_pThreaded_Preorder;

}

return null;

}

public CXMLObject FindNamedSubNode( String szName ,CXMLObject pStartNode , CXMLObject pParant )

{

CXMLObject pRoot = pStartNode;

pRoot = pRoot.m_pThreaded_Preorder;

while ( pRoot != null )

{

if( pRoot.GetLevel() <= pParant.GetLevel() )

break;

if ( ( pRoot.GetNodeName().equals( szName )) && ( pRoot.IsPosterityOf( pParant ) ) )

{

return pRoot;

}

pRoot = pRoot.m_pThreaded_Preorder;

}

return null;

}

public CXMLObject FindNamedLevelNode( String szName , CXMLObject pStartNode ,int iLevel )

{

CXMLObject pRoot = pStartNode;

pRoot = pRoot.m_pThreaded_Preorder;

while (pRoot != null)

{

if((pRoot.GetLevel() == iLevel ) && ( pRoot.GetNodeName().equals( szName )) )

{

return pRoot;

}

pRoot = pRoot.m_pThreaded_Preorder;

}

return null;

}

public void DestroyTree()

{

if( m_pXmlTreeRoot != null )

{

m_pXmlTreeRoot = null;

}

}

private CXMLObject m_pXmlTreeRoot;//=NULL;

}

//CXMLObject.java

import java.util.*;

public class CXMLObject

{

CXMLObject( String szNmae, int iLevel , CXMLObject pParant)

{

m_szName = szNmae;

m_iLevel = iLevel;

m_pParent = pParant;

}

public String GetNodeName()

{

return m_szName;

}

public int GetLevel()

{

return m_iLevel;

}

public CXMLObject GetParent()

{

if ( m_iLevel == 0 )

{

return null;

}

return m_pParent;

}

public String GetAttributeOnIndex( int iIndex )

{

String szAttributeValue = null;

int iSize = GetAttributeCount();

for (int i = 0; i < iSize; i++ )

{

if( i == iIndex )

{

szAttributeValue = this.FindAttribute ( m_strAttr.elementAt( i ) );

if( szAttributeValue != null )

return szAttributeValue;

}

}

return null;

}

public int GetAttributeCount()

{

return m_AttrMap.size();

}

public String FindAttribute( String szAttributeName )

{

String szAttributeValue = null;

szAttributeValue = m_AttrMap.get( szAttributeName );

if( szAttributeValue != null )

return szAttributeValue;

return null;

}

public CXMLObject GetChildOnIndex( int iIndex )

{

CXMLObject pChild = null;

pChild = m_aChildren.elementAt( iIndex );

if( pChild != null )

return pChild;

return null;

}

public int GetChildrenCount()

{

return m_aChildren.size();

}

public boolean IsPosterityOf( CXMLObject pParant )

{

CXMLObject pAncestor = this.m_pParent;

do

{

if ( pAncestor == pParant )

{

return true;

}

pAncestor = pAncestor.m_pParent;

}while( pAncestor != null );

return false;

}

public boolean IsLeaf()

{

if( m_aChildren.isEmpty() )

return true;

return false;

}

//返回给定点最左边的叶子节点

/*CXMLObject GetLastNode( CXMLObject pStart )

{

int count = pStart.GetChildrenCount();

if( count == 0 )

return pStart;

CXMLObject pTemp = pStart.m_aChildren.elementAt( count - 1 );

return GetLastNode( pTemp );

}

boolean Threaded_Preorder( CXMLObject pBefore )

{

pBefore.m_pThreaded_Preorder = this;

int iArrayCount=GetChildrenCount();

for( int i = 0;i < iArrayCount; i++ )

{

CXMLObject pToPreGo = null;

if( i == 0 )

pToPreGo = this;

else if( i >0 )

pToPreGo = GetLastNode(m_aChildren.elementAt( i-1 ));

if( !( m_aChildren.elementAt( i ).Threaded_Preorder( pToPreGo ) ) )

{

return false;

}

}

return true;

}*/

static CXMLObject m_Thread ;

boolean Threaded_Preorder( CXMLObject pBefore )

{

//CXMLObject.m_Thread.m_pThreaded_Preorder = this;

//CXMLObject.m_Thread = this;

int iArrayCount=GetChildrenCount();

for( int i = 0;i < iArrayCount; i++ )

{

if( ! m_aChildren.elementAt( i ).Threaded_Preorder( CXMLObject.m_Thread ) )

{

return false;

}

}

CXMLObject.m_Thread.m_pThreaded_Preorder = this;

CXMLObject.m_Thread = this;

return true;

}

private AddressPointer m_PofPre = null;

void AddAttribute( String szAttributeName, String szAttributeValue )

{

m_AttrMap.put(szAttributeName, szAttributeValue);

m_strAttr.add( szAttributeName );

}

void AddChild( CXMLObject pChild )

{

m_aChildren.add( pChild );

}

private void DestroyChildren()

{

m_aChildren.removeAllElements();

}

CXMLObject m_pThreaded_Preorder;

private String m_szName;

private int m_iLevel;

private CXMLObject m_pParent;

Vector< CXMLObject > m_aChildren = new Vector();

private Vector< String > m_strAttr = new Vector();

private Hashtable< String, String> m_AttrMap = new Hashtable();

}

原文链接: https://blog.csdn.net/dog250/article/details/5303365

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    XML解析器接口—java版

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410350

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午11:58
下一篇 2023年4月26日 上午11:58

相关推荐