XML解析器接口—java版
来源:互联网 发布:淘宝产品数据包 编辑:程序博客网 时间:2024/06/05 15:48
//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();
}
- XML解析器接口—java版
- XML解析器接口--C++版
- java 解析接口返回xml类型值
- java使用SAX接口解析xml文件
- 建设银行支付接口,按日期查询已结算订单xml接口解析(JAVA版)
- Java XML解析器
- xml文件解析—ContentHandler接口
- java 调用 webService Xfire接口,xml解析为object
- 详解XML解析(一)—解析接口浅析
- Java解析XML简单版
- Java SAX解析器解析XML配置文件
- digester解析器解析xml(java)
- Java解析xml——Dom解析
- Java解析xml——SAX解析
- Java解析xml——JDOM解析
- Java解析xml——Dom4J解析
- java解析XML——SAX解析
- java解析XML——dom4j解析
- 一个java写的弹球小游戏
- IT该进外企还是国企
- February, 9
- XML解析器接口--C++版
- 一天一个CRT函数 _strlwr/_strupr
- XML解析器接口—java版
- hibernate配置文件中的unsaved-value属性含义
- vs2005的FILE指针
- Posix标准中的timer和AIO
- char *和char数组的区别(深拷贝和浅拷贝的观点)以及内核访问用户空间
- 将普通的套接字网络应用修改为ssl网络应用
- 可重入性和线程安全
- i++循环与i--循环
- Tomcat的对象化处理和apache的统一式处理