Java XML Attribute Get getAttributeAsURIString(XMLStreamReader reader, String name)

Here you can find the source of getAttributeAsURIString(XMLStreamReader reader, String name)

Description

TUSCANY-242 Returns the URI value of an attribute as a string and first applies the URI whitespace processing as defined in section 4.3.6 of XML Schema Part2: Datatypes [http://www.w3.org/TR/xmlschema-2/#rf-facets].

License

Apache License

Parameter

Parameter Description
reader a parameter
name a parameter

Declaration

public static String getAttributeAsURIString(XMLStreamReader reader, String name) 

Method Source Code

//package com.java2s;
/*/* w  w w.  ja  v  a  2s.c  o  m*/
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.    
 */

import javax.xml.stream.XMLStreamReader;

public class Main {
    /**
     * TUSCANY-242
     * 
     * Returns the URI value of an attribute as a string and first applies the 
     * URI whitespace processing as defined in section 4.3.6 of XML Schema Part2: Datatypes
     * [http://www.w3.org/TR/xmlschema-2/#rf-facets]. anyURI is defined with the following 
     * XSD:
     *   <xs:simpleType name="anyURI" id="anyURI">
     *        <xs:restriction base="xs:anySimpleType">
     *          <xs:whiteSpace value="collapse" fixed="true" id="anyURI.whiteSpace"/>
     *        </xs:restriction>
     *   </xs:simpleType>
     *   
     * The <xs:whiteSpace value="collapse"/> constraining facet is defined as follows
     * 
     *   replace
     *      All occurrences of #x9 (tab), #xA (line feed) and #xD (carriage return) are replaced with #x20 (space) 
     *   collapse
     *      After the processing implied by replace, contiguous sequences of #x20's are collapsed to a single #x20, 
     *      and leading and trailing #x20's are removed
     *      
     * It seems that the StAX parser does apply this rule so we do it here. 
     * 
     * @param reader
     * @param name
     * @return
     */
    public static String getAttributeAsURIString(XMLStreamReader reader, String name) {
        // get the basic string value
        String uri = reader.getAttributeValue(null, name);

        // apply the "collapse" rule
        if (uri != null) {
            // turn tabs, line feeds and carriage returns into spaces
            uri = uri.replace('\t', ' ');
            uri = uri.replace('\n', ' ');
            uri = uri.replace('\r', ' ');

            // remote leading and trailing spaces. Other whitespace
            // has already been converted to spaces above
            uri = uri.trim();

            // collapse any contiguous spaces into a single space
            StringBuilder sb = new StringBuilder(uri.length());
            boolean spaceFound = false;
            for (int i = 0; i < uri.length(); ++i) {
                char c = uri.charAt(i);
                if (c == ' ') {
                    if (!spaceFound) {
                        sb.append(c);
                        spaceFound = true;
                    } else {
                        // collapse the space by ignoring it
                    }
                } else {
                    sb.append(c);
                    spaceFound = false;
                }
            }
            uri = sb.toString();
        }

        return uri;
    }
}

Related

  1. getAttributeAsBoolean(NamedNodeMap map, String name)
  2. getAttributeAsInteger(Element element, String attrName, Integer defValue)
  3. getAttributeAsLong(Element element, String attrName, Long defValue)
  4. getAttributeAsString(NamedNodeMap attributes, String name)
  5. getAttributeAsString(XMLStreamReader reader, String name)
  6. getAttributeBoolean(Element aElement, String aAttributeName)
  7. getAttributeBoolean(Element el, String label)
  8. getAttributeBoolean(final Element element, final String name)
  9. getAttributeBoolean(final Node node, final String name, final Boolean defaultValue)