2009-08-12 4 views
0

Ce que je fais est la validation des URL de mon code. J'ai donc un fichier avec url dedans et je veux voir s'ils existent ou pas. Si elles existent, la page Web contient du code XML dans lequel il y aura une adresse e-mail que je veux extraire. Je tourne autour d'une boucle while et dans chaque cas, si l'URL existe, le xml est ajouté à une chaîne. Cette grande chaîne contient le code xml. Ce que je veux faire est d'extraire l'adresse email de cette chaîne avec le code xml. Je ne peux pas utiliser les méthodes de la chaîne api car elles nécessitent de spécifier l'index de sarting que je ne connais pas car il varie à chaque fois. Ce que j'espérais faire était rechercher la chaîne pour une sous-chaîne commençant par (par exemple "<email id>") et se terminant par (par exemple "</email id>") et ajouter la chaîne entre ces chaînes à une chaîne séparée.Comment extraire une sous-chaîne à partir d'une chaîne dans Java

Est-ce que quelqu'un sait si c'est possible de faire ou s'il y a une manière plus facile/différente de faire ce que je veux faire?

Merci.

Répondre

3

Pour répondre à la question de votre sujet: .indexOf, ou, expressions régulières. Mais après un bref examen de votre question, vous devriez vraiment traiter correctement le document XML.

0

Avez-vous essayé d'utiliser Regex? Probablement un exemple de document sera très utile pour ce genre de question.

2

Une expression régulière qui va trouver et retour entre deux chaînes "caractères:.

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

private final static Pattern pattern = Pattern.compile("\"(.*?)\""); 

private void doStuffWithStringsBetweenQuotes(String source) { 
    Matcher matcher = pattern.matcher(source); 
    while (matcher.find()) { 
     String match = matcher.group(1); 
    } 
} 
0

Découvrez l'API org.xml.sax Il est très facile à utiliser et vous permet d'analyser par le XML et faire < email> démarrer éléments puis enregistrer le contenu (caractères) qui contiendra votre adresse e-mail

4

Si vous connaissez ce que vous voulez avec le contenu quand vous rencontrez quelque chose d'intéressant. bien la structure du document XML, je vous recommanderai d'utiliser XPath

Par exemple, avec des e-mails contenus dans <email> [email protected] </email >, il y aura une demande XPath comme/root/email (dépend de votre structure xml)

En exécutant cette requête XPath sur votre fichier XML, vous obtiendrez automatiquement tous les <email> élément (Node) retourné dans un tableau. Et si vous avez un élément XML, vous avez un contenu XML. (#getNodeValue)

0

Si je comprends bien votre question vous extrayez des morceaux de XML à partir de plusieurs pages Web et les concaténer dans une grande chaîne 'xml',

quelque chose qui ressemble

 

"<somedata>blah</somedata> 
<email>[email protected]</email> 
<somedata>blah</somedata> 
<somedata>blah</somedata> 
<email>[email protected]</email> 
<somedata>blah</somedata> 
<somedata>blah</somedata> 
<email>[email protected]</email> 
<somedata>blah</somedata> 
<somedata>blah</somedata> 
" 
 

I Je conseille d'en faire un document XML assez valide en incluant un élément racine.

 

" <?xml version="1.0" encoding="ISO-8859-1"?> <newRoot> <somedata>blah</somedata> <email>[email protected]</email> <somedata>blah</somedata> <somedata>blah</somedata> <email>[email protected]</email> <somedata>blah</somedata> <somedata>blah</somedata> <email>[email protected]</email> <somedata>blah</somedata> <somedata>blah</somedata> </newroot>"

Ensuite, vous pouvez charger que dans un objet de document XML et peut utiliser des expressions XPath pour extraire les nœuds de courrier électronique et leurs valeurs.

Si vous ne voulez pas faire cela, vous pouvez utiliser la méthode indexOf(String str, int fromIndex) pour trouver les positions <email> et </email> (ou quelle que soit leur position). puis sous-chaîne basée sur ceux-ci. Ce n'est pas une manière particulièrement propre ou facile à lire de le faire cependant.

Questions connexes