1 16 19 package org.apache.xpath.functions; 20 21 import org.apache.xml.dtm.DTM; 22 import org.apache.xpath.XPathContext; 23 import org.apache.xpath.objects.XBoolean; 24 import org.apache.xpath.objects.XObject; 25 26 30 public class FuncLang extends FunctionOneArg 31 { 32 33 41 public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException 42 { 43 44 String lang = m_arg0.execute(xctxt).str(); 45 int parent = xctxt.getCurrentNode(); 46 boolean isLang = false; 47 DTM dtm = xctxt.getDTM(parent); 48 49 while (DTM.NULL != parent) 50 { 51 if (DTM.ELEMENT_NODE == dtm.getNodeType(parent)) 52 { 53 int langAttr = dtm.getAttributeNode(parent, "http://www.w3.org/XML/1998/namespace", "lang"); 54 55 if (DTM.NULL != langAttr) 56 { 57 String langVal = dtm.getNodeValue(langAttr); 58 if (langVal.toLowerCase().startsWith(lang.toLowerCase())) 60 { 61 int valLen = lang.length(); 62 63 if ((langVal.length() == valLen) 64 || (langVal.charAt(valLen) == '-')) 65 { 66 isLang = true; 67 } 68 } 69 70 break; 71 } 72 } 73 74 parent = dtm.getParent(parent); 75 } 76 77 return isLang ? XBoolean.S_TRUE : XBoolean.S_FALSE; 78 } 79 } 80 | Popular Tags |