加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex对于Xml文件的增删改查类

发布时间:2020-12-15 05:07:59 所属栏目:百科 来源:网络整理
导读:package includes { ?import flash.xml.XMLDocument; ?import flash.xml.XMLNode; ? ?import mx.controls.Alert; ?import mx.rpc.xml.SimpleXMLEncoder; ?public class ExtendXmlList? ?{ ??private var xmllist:XMLList;//定义一个XMLLIST来进行增删改查 ??

package includes
{
?import flash.xml.XMLDocument;
?import flash.xml.XMLNode;
?
?import mx.controls.Alert;
?import mx.rpc.xml.SimpleXMLEncoder;

?public class ExtendXmlList?
?{
??private var xmllist:XMLList;//定义一个XMLLIST来进行增删改查
??private var strXmllist:String = "";
??
?/**构造方法
???? *允许有3种构造方法,每次传入3个对象 XMLList,Object,XML,对象可以为null,但如果所有对象为空就会抛出异常
???? */
??public function ExtendXmlList(xl:XMLList=null,obj:Object=null,xml:XML=null)
??{
???if (xl != null)
???{
????xmllist=xl;
????return;
???}
???else if (obj != null)
???{
????var qName:QName=new QName("root");
????var xmlDocument:XMLDocument=new XMLDocument();
????var simpleXMLEncoder:SimpleXMLEncoder=new SimpleXMLEncoder(xmlDocument);
????var xmlNode:XMLNode=simpleXMLEncoder.encodeValue(obj,qName,xmlDocument);
????xmllist=new XMLList(xmlDocument.toString());
????return;
???}
???else if (xml != null)
???{
????xmllist=xml.elements();
????return;
???}
???throw new ExtendXmlListException("传入的参数不能都为空。")
??}
?/**Select
???? * 查找XMLLIST中子节点名称为nodeName,属性名称为attributeName,属性值为attributeValue的所有XML。
???? * 当nodeName=null时,其他不能为空,根据attributeName和value查找整个XMLLIST。
???? * 当attributeName和attributeValue=null时,nodeName不能为""和null,根据nodeName反回节点下所有XML
???? * nodeName ??? 节点名称
???? * attributeName?? 属性名称
???? * attributeValue? 属性值
???? */
???? ?
??public function queryXmlList(nodeName:String=null,attributeName:String=null,attributeValue:String=null):XMLList
?? {
?? ?if(nodeName==null)
?? ?{
?? ??if(attributeName==null||attributeValue==null||attributeName==""){
?? ???throw new ExtendXmlListException("当节点名称为Null时,属性名称不能为null或者空字符串,值不能为null")
?? ??}
?? ?}
?? ?if(attributeName==null||attributeValue==null||attributeName=="")
?? ?{
?? ??if(nodeName==null&&nodeName==""){
?? ???throw new ExtendXmlListException("属性名或值为null或空字符串时,节点名称不能为null或者空字符串。")
?? ??}
?? ?}
?? ?if(nodeName!=null)
?? ?{
?? ??if(attributeName==null || attributeValue==null)
?? ??{
?? ???for each(var xml:XML in xmllist)
?? ???{
?? ????if(xml.name()==nodeName){
?? ?????strXmllist += xml.toXMLString()+"n";
?? ????}
?? ????if(xml.hasComplexContent()){
?? ?????queryForeach(xml,nodeName,attributeName,attributeValue);
?? ????}
?? ???}
?? ??}
?? ??else
?? ??{
?? ???for each(var xmlq:XML in xmllist)
?? ???{
? ?????if(xmlq.name() == nodeName &&?xmlq.@[attributeName]==attributeValue)
??? ???{
??? ????strXmllist += xmlq.toXMLString()+"n";
??? ???}
??? ???if(xmlq.hasComplexContent()){
?? ?????queryForeach(xmlq,attributeValue);
?? ????}
?? ???}
?? ??}
?? ??var qName:QName = new QName("root");
???????????? var xmlDocument:XMLDocument = new XMLDocument();
???????????? var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
???????????? var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(strXmllist,xmlDocument);
? ???xmllist = new XMLList(xmlDocument.toString());
?? ?}
?? ?return xmllist;
?? }
?
?/**递归查询节点
???? * nodeName ??? 节点名称
???? * attributeName?? 属性名称
???? * attributeValue? 属性值
???? */
?? private function queryForeach(xml:XML,nodeName:String=null,attributeValue:String=null):void
?? {
? ??if(attributeName==null || attributeValue==null)
? ??{
? ???var xmll:XMLList = xml.children();
? ???for each(var xmlNew:XML in xmll){
? ????if(xmlNew.name()==nodeName){
? ?????strXmllist+=xmlNew.toXMLString() + "n";
? ?????trace(xmlNew);
? ????}
? ????if(xmlNew.hasComplexContent()){
? ?????queryForeach(xmlNew,attributeValue);
? ????}
? ???}
? ??}
? ??else
? ??{
?????var newXmllistQ:XMLList = xml.children();
??????????? ?for each(var newXmlQ:XML in newXmllistQ){
??????????? ??if(newXmlQ.name() == nodeName &&?newXmlQ.@[attributeName]==attributeValue){
??????????? ???strXmllist+=newXmlQ.toXMLString() + "n";
??????????? ??}
??????????? ??if(newXmlQ.hasComplexContent()){
? ?????queryForeach(newXmlQ,attributeValue);
? ????}
??????????? ?}
? ??}
?? }
?
?/**Insert
???? *? 在子节点名称为nodeName的下面插入一行XML。如果nodeName=null,则在XMLLIST文档末尾增加
???? * xmlValue?? 传入的XML值
???? * nodeName?? 节点名称
???? */
?? public function InsertToXmlList(xmlValue:String,nodeName:String=null):XMLList
?? {
?? ?if(xmlValue==null && xmlValue=="")
?? ?{
?? ??throw new ExtendXmlListException("传入的XML不能为空值。")
?? ?}
?? ?if(nodeName==null||nodeName=="")
?? ?{
?? ??var strXmllist:String = xmllist.toString();
?? ??strXmllist += "r" + xmlValue;
?? ??var qName:QName = new QName("root");
???????????? var xmlDocument:XMLDocument = new XMLDocument();
???????????? var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
???????????? var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(strXmllist,xmlDocument);
????xmllist = new XMLList(xmlDocument.toString());
?? ??return xmllist;
?? ?}
?? ?else
?? ?{
?? ??for each(var xmlT:XML in xmllist)
???????????? {????????
???????????? ?insertForeach(xmlT,xmlValue,nodeName);
???????????? }
??????????? }
?? ?return xmllist;
?? }
?/**递归添加节点
???? * nodeName ??? 节点名称
???? * xml?? 用于循环插入的XML
???? * xmlValue? 传入的XML值
???? */
?? private function insertForeach(xml:XML,xmlValue:String,nodeName:String=null):void
?? {
?? ?if(xml.name() == nodeName){
??????????? ?xml.appendChild(xmlValue);
??? ??}
??? ??if(xml.hasComplexContent()){
??? ???var xmllistNew:XMLList = xml.children();
??? ???for each(var xmlNew:XML in xmllistNew){
??? ????insertForeach(xmlNew,nodeName);
??? ???}
??? ??}
?? }
???
?/**Update
???? * 在子节点名称为nodeName的下面修改一行XML。如果nodeName=null,则修改整个XMLLIST中对应的xml属性值
???? * nodeName ??? 节点名称
???? * attributeName?? 属性名称
???? * attributeValue? 属性值
???? */
???? //?"Keyproject","能力提升","修改后的值","items");
?? public function updateXmlList(attributeName:String,oldValue:String,attributeValue:String,nodeName:String=null):XMLList
?? {
?? ?if(nodeName==null||nodeName=="")
?? ?{
?? ??if(attributeName==null||attributeName==""||attributeName==null){
?? ???throw new ExtendXmlListException("节点名称为空时,属性名称不能为null或空字符,属性值不能为null。")
?? ??}
?? ?}
?? ?if(attributeName==null||attributeName==""||attributeValue==null){
?? ??throw new ExtendXmlListException("属性名称不能为null或空字符,属性值不能为null。")
?? ?}
?? ?for each(var xml:XML in xmllist)
??????????? {
??????????????? updateForeach(xml,oldValue,attributeValue,nodeName);
??????????? }
?? ?return xmllist;
?? }
?/**递归查询并且修改节点
???? *? 在子节点名称为nodeName的下面修改一行XML。如果nodeName=null,则修改整个XMLLIST中对应的xml属性值
???? * XML:用与递归的XML
???? * nodeName ??? 节点名称
???? * attributeName?? 属性名称
???? * attributeValue? 属性值
???? */
?? private function updateForeach(xml:XML,attributeName:String,nodeName:String=null):void
?? {
?? ?if(nodeName!=null||nodeName==""){
?? ??if(xml.name()==nodeName){
?? ???var xmllistU:XMLList = xml.children();
??? ??for each(var xmlUp:XML in xmllistU){
??? ???if(xmlUp.@[attributeName]==oldValue){
??? ????xmlUp.@[attributeName]=attributeValue;
??? ???}
??? ??}
?? ??}
?? ??else{
?? ???var xmllistUT:XMLList = xml.children();
??? ??for each(var xmlUpT:XML in xmllistUT){
??? ???updateForeach(xmlUpT,nodeName);
??? ??}
?? ??}
????????? }
????????? else???//节点名称为null,修改attributeName=oldValue 为attributeName=attributeValue
????????? {
????????? ? if(xml.@[attributeName]==oldValue){
????????? ? ?xml.@[attributeName]=attributeValue;
????????? ? }
????????? ? if(xml.hasComplexContent()){
???????????? ?var xmllistUN:XMLList = xml.children();
???????????? ?for each(var xmlUN:XML in xmllistUN){
??????????? ???updateForeach(xmlUN,nodeName);
??????????? ??}
???????????? }?
????????? }
?? }
?
?/**Delete
???? *? 删除XMLLIST中的一项或者多项,nodeName为空时,查找所有合适条件的XML项目,并删除。attributeName和attributeValue
???? * 为空时,删除整个节点下所有XML。如果该方法不传参数,则删除整个XMLLIST
???? * nodeName ??? 节点名称
???? * attributeName?? 属性名称
???? * attributeValue? 属性值
???? */
??public function deleteFromXmlList(attributeName:String=null,attributeValue:String=null,nodeName:String=null):XMLList
?? {
?? ?if(attributeName==null&&attributeValue==null&&nodeName==null)?//删除整个XMLLIST
?? ?{
?? ??var num:int? = xmllist.length()-1;
?? ??for(var i:int=num;i>=0;i--)
??? ?{
??? ??delete xmllist[i];
??? ??var xmll:XMLList = xmllist;
??? ?}
?? ?}
?? ?else
?? ?{
?? ??var numT:int? = xmllist.length()-1;
?? ??for(var j:int=numT;j>=0;j--)
?? ??{
?????var xml:XML = xmllist[j] as XML;
?????if(attributeName==null&&attributeValue==null&&nodeName!=null)
?????{
??????if(xml.name()==nodeName){??//根据 节点名 删除
???????delete xmllist[j];
??????}
?????}
?????else if(nodeName==null&&attributeName!=null&&attributeValue!=null)?//根据 属性与值 删除
?????{
??????if(xml.@[attributeName] == attributeValue){
???????delete xmllist[j];
??????}
?????}
?????else
?????{??????//根据 节点名 属性与值 删除
??????if(xml.name()==nodeName &&?xml.@[attributeName] == attributeValue){
???????delete xmllist[j];
??????}
?????}
?????if(xml.hasComplexContent()){
??????deleteForeach(xml,nodeName);
?????}
?? ??}
?? ?}
?? ?return xmllist;
?? }
??private function deleteForeach(xml:XML,nodeName:String=null):void
??{
???var xmllistD:XMLList = xml.children();
???var num:int = xmllistD.length()-1;
???for(var i:int=num;i>=0;i--)
?? ?{
?? ??var xmlNew:XML = xmllistD[i] as XML;
?? ??if(attributeName==null&&attributeValue==null&&nodeName!=null)??//根据 节点名 删除
?? ??{
?? ???if(xmlNew.name()==nodeName){
??????delete xmllistD[i];
?????}
?? ??}
?? ??else if(nodeName==null&&attributeName!=null&&attributeValue!=null)?//根据 属性与值 删除
?? ??{
?? ?? ?if(xmlNew.@[attributeName] == attributeValue){
??????delete xmllistD[i];
?????}
?? ?? }
?? ?? else
?? ?? {????//根据 节点名 属性与值 删除
?? ?? ?if(xmlNew.name()==nodeName &&?xmlNew.@[attributeName] == attributeValue){
??????delete xmllistD[i];
?????}
?? ?? }
????if(xmlNew.hasComplexContent()){
?????deleteForeach(xml,nodeName);
????}
?? ?}
??}
?}
}

标签

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读