
Public Member Functions | |
| XPathElement () | |
| XPathElement (final String child_name) | |
| XPathElement (final String child_name, int child_idx) | |
| XPathElement (final String child_name, int child_idx, final String attr_name, final String attr_value) | |
| XMLNode | find (final XMLNode node) |
| boolean | matches (final AbstractXMLNode node, int[] n) |
Public Attributes | |
| String | _childName |
Package Functions | |
| int | parse (final String path, int idx) |
Package Attributes | |
| Map< String, String > | _mAttrAndAttr = new HashMap<String, String>() |
Private Attributes | |
| int | _childIdx |
Definition at line 44 of file XPathElement.java.
| de.mfuchs.xmlstorage.XPathElement.XPathElement | ( | ) |
Definition at line 46 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._childIdx.
{
_childIdx = -1;
}
| de.mfuchs.xmlstorage.XPathElement.XPathElement | ( | final String | child_name ) |
Definition at line 51 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._childIdx, and de.mfuchs.xmlstorage.XPathElement._childName.
{
_childName = child_name;
_childIdx = -1;
}
| de.mfuchs.xmlstorage.XPathElement.XPathElement | ( | final String | child_name, |
| int | child_idx | ||
| ) |
Definition at line 57 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._childIdx, and de.mfuchs.xmlstorage.XPathElement._childName.
{
_childName = child_name;
_childIdx = child_idx;
}
| de.mfuchs.xmlstorage.XPathElement.XPathElement | ( | final String | child_name, |
| int | child_idx, | ||
| final String | attr_name, | ||
| final String | attr_value | ||
| ) |
Definition at line 63 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._mAttrAndAttr.
{
this(child_name, child_idx);
_mAttrAndAttr.put(attr_name, attr_value);
}
Definition at line 144 of file XPathElement.java.
References de.mfuchs.xmlstorage.XMLNode._children, and de.mfuchs.xmlstorage.XPathElement.matches().
{
int[] n = new int[] {0}; // index in array for call-by-reference matches()
for(XMLNode it : node._children)
if (matches(it, n))
return it;
return null;
}

| boolean de.mfuchs.xmlstorage.XPathElement.matches | ( | final AbstractXMLNode | node, |
| int[] | n | ||
| ) |
Definition at line 155 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._childIdx, de.mfuchs.xmlstorage.XPathElement._childName, de.mfuchs.xmlstorage.XPathElement._mAttrAndAttr, de.mfuchs.xmlstorage.AbstractXMLNode.get(), and de.mfuchs.xmlstorage.AbstractXMLNode.toString().
Referenced by de.mfuchs.xmlstorage.XPathElement.find().
{
if (!node.toString().equals(_childName))
if (!_childName.equals("*")) // use asterisk as wildcard
return false;
for(Map.Entry<String, String> it : _mAttrAndAttr.entrySet())
if (!node.get(it.getKey()).equals(it.getValue()))
return false;
if (_childIdx == -1)
return true;
else if (n[0]++ == _childIdx)
return true;
else
return false;
}

| int de.mfuchs.xmlstorage.XPathElement.parse | ( | final String | path, |
| int | idx | ||
| ) | [package] |
Definition at line 76 of file XPathElement.java.
References de.mfuchs.xmlstorage.XPathElement._childIdx, de.mfuchs.xmlstorage.XPathElement._childName, de.mfuchs.xmlstorage.XPathElement._mAttrAndAttr, and de.mfuchs.xmlstorage.XMLHelper.unescape().
Referenced by de.mfuchs.xmlstorage.XPath.init().
{
int f = path.indexOf('/', idx);
if (f == idx)
return -1;
// parse relative path
int l = f!=-1? f-idx: path.length()-idx;
String comp = path.substring(idx, idx+l);
idx += l;
// look for [n] and [@attr_name="attr_value"] expressions in path components
int idxBracket = comp.indexOf('[');
l = idxBracket!=-1? idxBracket: comp.length();
_childName = comp.substring(0, l);
if (idxBracket != -1) {
String expr = XMLHelper.unescape(comp.substring(idxBracket), '[', ']');
int i = 0;
while(i<expr.length() && Character.isWhitespace(expr.charAt(i))) ++i;
if (i<expr.length() && Character.isDigit(expr.charAt(i))) {
try {
int n = Integer.parseInt(expr.substring(i)); // read index number
if (n != 0)
_childIdx = n - 1; // convert into zero based index
} catch(NumberFormatException e) {
}
} else {
while(i<expr.length() && expr.charAt(i)=='@') {
int idxEqual = expr.indexOf('=', ++i);
if (idxEqual != -1) {
// look for delimiters
//TODO If there is neither an opening nor a closing delimiter, we should look for white space as delimiter.
int idxDel1 = idxEqual+1;
char del1 = expr.charAt(idxDel1);
int idxDel2 = del1=='\'' || del1=='"'? expr.indexOf(del1, idxDel1+1);
// read attribute name and value
String attrName = XMLHelper.unescape(expr.substring(i, idxEqual));
String attrValue = idxDel2!=-1? XMLHelper.unescape(expr.substring(idxDel1, ++idxDel2)):
XMLHelper.unescape(expr.substring(idxDel1));
_mAttrAndAttr.put(attrName, attrValue);
if (idxDel2 == -1)
break;
i = idxDel2 + 1;
while(i<expr.length() && Character.isWhitespace(expr.charAt(i))) ++i;
// handle [@attr1="value1" and @attr2="value2"] expressions
// handle expressions like [@name="1.2" and @profil="IPE" and @date="2006_07"]
if (expr.regionMatches(true, 0, "and ", i, 4))
i += 4;
}
while(i<expr.length() && Character.isWhitespace(expr.charAt(i))) ++i;
}
}
}
return idx;
}

int de.mfuchs.xmlstorage.XPathElement._childIdx [private] |
Definition at line 71 of file XPathElement.java.
Referenced by de.mfuchs.xmlstorage.XPathElement.matches(), de.mfuchs.xmlstorage.XPathElement.parse(), and de.mfuchs.xmlstorage.XPathElement.XPathElement().
Definition at line 70 of file XPathElement.java.
Referenced by de.mfuchs.xmlstorage.XPathElement.matches(), de.mfuchs.xmlstorage.XPathElement.parse(), and de.mfuchs.xmlstorage.XPathElement.XPathElement().
Map<String, String> de.mfuchs.xmlstorage.XPathElement._mAttrAndAttr = new HashMap<String, String>() [package] |
Definition at line 74 of file XPathElement.java.
Referenced by de.mfuchs.xmlstorage.XPathElement.matches(), de.mfuchs.xmlstorage.XPathElement.parse(), and de.mfuchs.xmlstorage.XPathElement.XPathElement().
1.7.2